瀏覽代碼

Factoring out WindowsVersion() and WindowsVersionLong() + Bug fix: The WindowsVersion counter did not include build number on Windows 10

Source commit: bc2456c544007275c8e6172a52cb99cb8b6a2d11
Martin Prikryl 9 年之前
父節點
當前提交
64aed65df0

+ 21 - 0
source/core/Common.cpp

@@ -2575,6 +2575,27 @@ UnicodeString __fastcall WindowsProductName()
   return Result;
   return Result;
 }
 }
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
+UnicodeString __fastcall WindowsVersion()
+{
+  UnicodeString Result;
+  OSVERSIONINFO OSVersionInfo;
+  OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVersionInfo);
+  // Cannot use the VCL Win32MajorVersion+Win32MinorVersion+Win32BuildNumber as
+  // on Windows 10 due to some hacking in InitPlatformId, the Win32BuildNumber is lost
+  if (GetVersionEx(&OSVersionInfo) != 0)
+  {
+    Result = FORMAT(L"%d.%d.%d", (int(OSVersionInfo.dwMajorVersion), int(OSVersionInfo.dwMinorVersion), int(OSVersionInfo.dwBuildNumber)));
+  }
+  return Result;
+}
+//---------------------------------------------------------------------------
+UnicodeString __fastcall WindowsVersionLong()
+{
+  UnicodeString Result = WindowsVersion();
+  AddToList(Result, Win32CSDVersion, L" ");
+  return Result;
+}
+//---------------------------------------------------------------------------
 bool __fastcall IsDirectoryWriteable(const UnicodeString & Path)
 bool __fastcall IsDirectoryWriteable(const UnicodeString & Path)
 {
 {
   UnicodeString FileName =
   UnicodeString FileName =

+ 2 - 0
source/core/Common.h

@@ -128,6 +128,8 @@ LCID __fastcall GetDefaultLCID();
 UnicodeString __fastcall DefaultEncodingName();
 UnicodeString __fastcall DefaultEncodingName();
 UnicodeString __fastcall WindowsProductName();
 UnicodeString __fastcall WindowsProductName();
 bool _fastcall GetWindowsProductType(DWORD & Type);
 bool _fastcall GetWindowsProductType(DWORD & Type);
+UnicodeString __fastcall WindowsVersion();
+UnicodeString __fastcall WindowsVersionLong();
 bool __fastcall IsDirectoryWriteable(const UnicodeString & Path);
 bool __fastcall IsDirectoryWriteable(const UnicodeString & Path);
 UnicodeString __fastcall FormatNumber(__int64 Size);
 UnicodeString __fastcall FormatNumber(__int64 Size);
 UnicodeString __fastcall FormatSize(__int64 Size);
 UnicodeString __fastcall FormatSize(__int64 Size);

+ 0 - 23
source/core/Configuration.cpp

@@ -759,29 +759,6 @@ RawByteString __fastcall TConfiguration::StronglyRecryptPassword(RawByteString P
   return Password;
   return Password;
 }
 }
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
-UnicodeString __fastcall TConfiguration::GetOSVersionStr()
-{
-  UnicodeString Result;
-  OSVERSIONINFO OSVersionInfo;
-  OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVersionInfo);
-  if (GetVersionEx(&OSVersionInfo) != 0)
-  {
-    Result = FORMAT(L"%d.%d.%d", (int(OSVersionInfo.dwMajorVersion),
-      int(OSVersionInfo.dwMinorVersion), int(OSVersionInfo.dwBuildNumber)));
-    UnicodeString CSDVersion = OSVersionInfo.szCSDVersion;
-    if (!CSDVersion.IsEmpty())
-    {
-      Result += L" " + CSDVersion;
-    }
-    UnicodeString ProductName = WindowsProductName();
-    if (!ProductName.IsEmpty())
-    {
-      Result += L" - " + ProductName;
-    }
-  }
-  return Result;
-}
-//---------------------------------------------------------------------------
 TVSFixedFileInfo *__fastcall TConfiguration::GetFixedApplicationInfo()
 TVSFixedFileInfo *__fastcall TConfiguration::GetFixedApplicationInfo()
 {
 {
   return GetFixedFileInfo(ApplicationInfo);
   return GetFixedFileInfo(ApplicationInfo);

+ 0 - 2
source/core/Configuration.h

@@ -71,7 +71,6 @@ private:
   bool FDisableAcceptingHostKeys;
   bool FDisableAcceptingHostKeys;
   bool FDefaultCollectUsage;
   bool FDefaultCollectUsage;
 
 
-  UnicodeString __fastcall GetOSVersionStr();
   TVSFixedFileInfo *__fastcall GetFixedApplicationInfo();
   TVSFixedFileInfo *__fastcall GetFixedApplicationInfo();
   void * __fastcall GetApplicationInfo();
   void * __fastcall GetApplicationInfo();
   virtual UnicodeString __fastcall GetVersionStr();
   virtual UnicodeString __fastcall GetVersionStr();
@@ -235,7 +234,6 @@ public:
   __property UnicodeString ProductVersion = { read=GetProductVersion };
   __property UnicodeString ProductVersion = { read=GetProductVersion };
   __property UnicodeString ProductName = { read=GetProductName };
   __property UnicodeString ProductName = { read=GetProductName };
   __property UnicodeString CompanyName = { read=GetCompanyName };
   __property UnicodeString CompanyName = { read=GetCompanyName };
-  __property UnicodeString OSVersionStr = { read = GetOSVersionStr };
   __property bool IsUnofficial = { read = GetIsUnofficial };
   __property bool IsUnofficial = { read = GetIsUnofficial };
   __property bool Logging  = { read=FLogging, write=SetLogging };
   __property bool Logging  = { read=FLogging, write=SetLogging };
   __property UnicodeString LogFileName  = { read=FLogFileName, write=SetLogFileName };
   __property UnicodeString LogFileName  = { read=FLogFileName, write=SetLogFileName };

+ 3 - 1
source/core/SessionInfo.cpp

@@ -1011,7 +1011,9 @@ void __fastcall TSessionLog::DoAddStartupInfo(TSessionData * Data)
     if (Data == NULL)
     if (Data == NULL)
     {
     {
       AddSeparator();
       AddSeparator();
-      ADF(L"WinSCP %s (OS %s)", (FConfiguration->VersionStr, FConfiguration->OSVersionStr));
+      UnicodeString OS = WindowsVersionLong();
+      AddToList(OS, WindowsProductName(), L" - ");
+      ADF(L"WinSCP %s (OS %s)", (FConfiguration->VersionStr, OS));
       THierarchicalStorage * Storage = FConfiguration->CreateConfigStorage();
       THierarchicalStorage * Storage = FConfiguration->CreateConfigStorage();
       try
       try
       {
       {

+ 1 - 3
source/windows/WinMain.cpp

@@ -345,9 +345,7 @@ void __fastcall UpdateStaticUsage()
 
 
   Configuration->Usage->UpdateCurrentVersion();
   Configuration->Usage->UpdateCurrentVersion();
 
 
-  UnicodeString WindowsVersion = FORMAT("%d.%d.%d", (Win32MajorVersion, Win32MinorVersion, Win32BuildNumber));
-  AddToList(WindowsVersion, Win32CSDVersion, L" ");
-  Configuration->Usage->Set(L"WindowsVersion", (WindowsVersion));
+  Configuration->Usage->Set(L"WindowsVersion", (WindowsVersionLong()));
   Configuration->Usage->Set(L"WindowsProductName", (WindowsProductName()));
   Configuration->Usage->Set(L"WindowsProductName", (WindowsProductName()));
   DWORD Type;
   DWORD Type;
   GetWindowsProductType(Type);
   GetWindowsProductType(Type);