diff --git a/win-linux/extras/online-installer/src/main.cpp b/win-linux/extras/online-installer/src/main.cpp index 9e681d819..4f94e770d 100644 --- a/win-linux/extras/online-installer/src/main.cpp +++ b/win-linux/extras/online-installer/src/main.cpp @@ -40,7 +40,8 @@ int WINAPI _tWinMain(_In_ HINSTANCE hInst, _In_opt_ HINSTANCE hPrevInstance, _In { UNREFERENCED_PARAMETER(hPrevInstance); std::locale::global(std::locale("")); - Translator lang(GetUserDefaultUILanguage(), IDT_TRANSLATIONS); + LCID lcid = MAKELCID(GetUserDefaultUILanguage(), SORT_DEFAULT); + Translator lang(lcid, IDT_TRANSLATIONS); HANDLE hMutex = CreateMutex(NULL, FALSE, _T(VER_PRODUCTNAME_STR)); if (GetLastError() == ERROR_ALREADY_EXISTS) { NS_Utils::ShowMessage(_TR(MESSAGE_TEXT_ERR2)); diff --git a/win-linux/extras/online-installer/src/utils.cpp b/win-linux/extras/online-installer/src/utils.cpp index fa77f8e65..c329c2187 100644 --- a/win-linux/extras/online-installer/src/utils.cpp +++ b/win-linux/extras/online-installer/src/utils.cpp @@ -158,41 +158,28 @@ namespace NS_File WinVer getWinVersion() { - NTSTATUS(WINAPI *RtlGetVersion)(LPOSVERSIONINFOEXW); - *(FARPROC*)&RtlGetVersion = GetProcAddress(GetModuleHandleA("ntdll"), "RtlGetVersion"); - if (RtlGetVersion != NULL) { - OSVERSIONINFOEXW osInfo; - osInfo.dwOSVersionInfoSize = sizeof(osInfo); - RtlGetVersion(&osInfo); - - if (osInfo.dwMajorVersion == 5L && (osInfo.dwMinorVersion == 1L || osInfo.dwMinorVersion == 2L)) - return WinVer::WinXP; - else - if (osInfo.dwMajorVersion == 6L && osInfo.dwMinorVersion == 0L) - return WinVer::WinVista; - else - if (osInfo.dwMajorVersion == 6L && osInfo.dwMinorVersion == 1L) - return WinVer::Win7; - else - if (osInfo.dwMajorVersion == 6L && osInfo.dwMinorVersion == 2L) - return WinVer::Win8; - else - if (osInfo.dwMajorVersion == 6L && osInfo.dwMinorVersion == 3L) - return WinVer::Win8_1; - else - if (osInfo.dwMajorVersion == 10L) { - if (osInfo.dwMinorVersion == 0L) { - if (osInfo.dwBuildNumber < 22000) - return WinVer::Win10; - else - return WinVer::Win11; - } else - return WinVer::Win11; - } else - if (osInfo.dwMajorVersion > 10L) - return WinVer::Win11; + static WinVer winVer = WinVer::Undef; + if (winVer == WinVer::Undef) { + if (HMODULE module = GetModuleHandleA("ntdll")) { + NTSTATUS(WINAPI *RtlGetVersion)(LPOSVERSIONINFOEXW); + *(FARPROC*)&RtlGetVersion = GetProcAddress(module, "RtlGetVersion"); + if (RtlGetVersion) { + OSVERSIONINFOEXW os = {0}; + os.dwOSVersionInfoSize = sizeof(os); + RtlGetVersion(&os); + winVer = os.dwMajorVersion == 5L && (os.dwMinorVersion == 1L || os.dwMinorVersion == 2L) ? WinVer::WinXP : + os.dwMajorVersion == 6L && os.dwMinorVersion == 0L ? WinVer::WinVista : + os.dwMajorVersion == 6L && os.dwMinorVersion == 1L ? WinVer::Win7 : + os.dwMajorVersion == 6L && os.dwMinorVersion == 2L ? WinVer::Win8 : + os.dwMajorVersion == 6L && os.dwMinorVersion == 3L ? WinVer::Win8_1 : + os.dwMajorVersion == 10L && os.dwMinorVersion == 0L && os.dwBuildNumber < 22000 ? WinVer::Win10 : + os.dwMajorVersion == 10L && os.dwMinorVersion == 0L && os.dwBuildNumber >= 22000 ? WinVer::Win11 : + os.dwMajorVersion == 10L && os.dwMinorVersion > 0L ? WinVer::Win11 : + os.dwMajorVersion > 10L ? WinVer::Win11 : WinVer::Undef; + } + } } - return WinVer::Undef; + return winVer; } // bool verifyEmbeddedSignature(const wstring &fileName)