mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Misc: Added windows version checks during startup to avoid confusion about crashes when running on unsupported OS
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
add_definitions(-D_WIN32_WINNT=0x0601)
|
||||
add_definitions(-D_WIN32_WINNT=0x0A00) # Windows 10
|
||||
add_definitions(-DNTDDI_VERSION=0x0A000007) # 19H1 (1903)
|
||||
add_definitions(-DWIN32_LEAN_AND_MEAN)
|
||||
add_definitions(-DNOMINMAX)
|
||||
add_definitions(-DTRINITY_REQUIRED_WINDOWS_BUILD=18362)
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" OR CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/compiler/msvc/settings.cmake)
|
||||
|
||||
@@ -243,7 +243,7 @@ BOOL WheatyExceptionReport::_GetWindowsVersion(TCHAR* szVersion, DWORD cntMax)
|
||||
RTL_OSVERSIONINFOEXW osvi = { };
|
||||
osvi.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW);
|
||||
NTSTATUS bVersionEx = RtlGetVersion((PRTL_OSVERSIONINFOW)&osvi);
|
||||
if (bVersionEx < 0)
|
||||
if (FAILED(bVersionEx))
|
||||
{
|
||||
osvi.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOW);
|
||||
if (!RtlGetVersion((PRTL_OSVERSIONINFOW)&osvi))
|
||||
|
||||
@@ -31,11 +31,27 @@
|
||||
#include <cstdarg>
|
||||
#include <ctime>
|
||||
|
||||
#if TRINITY_COMPILER == TRINITY_COMPILER_GNU
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
void Trinity::VerifyOsVersion()
|
||||
{
|
||||
#if TRINITY_PLATFORM == TRINITY_PLATFORM_WINDOWS
|
||||
auto isWindowsBuildGreaterOrEqual = [](DWORD build)
|
||||
{
|
||||
OSVERSIONINFOEX osvi = { sizeof(osvi), 0, 0, build, 0, {0}, 0, 0, 0, 0 };
|
||||
ULONGLONG conditionMask = 0;
|
||||
VER_SET_CONDITION(conditionMask, VER_BUILDNUMBER, VER_GREATER_EQUAL);
|
||||
|
||||
return VerifyVersionInfo(&osvi, VER_BUILDNUMBER, conditionMask);
|
||||
};
|
||||
|
||||
if (!isWindowsBuildGreaterOrEqual(TRINITY_REQUIRED_WINDOWS_BUILD))
|
||||
{
|
||||
OSVERSIONINFOEX osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0, 0, 0 };
|
||||
GetVersionEx((LPOSVERSIONINFO)&osvi);
|
||||
ABORT_MSG("TrinityCore requires Windows 10 19H1 (1903) or Windows Server 2019 (1903) - require build number 10.0.%d but found %d.%d.%d",
|
||||
TRINITY_REQUIRED_WINDOWS_BUILD, osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
std::vector<std::string_view> Trinity::Tokenize(std::string_view str, char sep, bool keepEmpty)
|
||||
{
|
||||
|
||||
@@ -40,6 +40,8 @@ enum class TimeFormat : uint8
|
||||
|
||||
namespace Trinity
|
||||
{
|
||||
TC_COMMON_API void VerifyOsVersion();
|
||||
|
||||
TC_COMMON_API std::vector<std::string_view> Tokenize(std::string_view str, char sep, bool keepEmpty);
|
||||
|
||||
/* this would return string_view into temporary otherwise */
|
||||
|
||||
@@ -90,6 +90,8 @@ int main(int argc, char** argv)
|
||||
{
|
||||
signal(SIGABRT, &Trinity::AbortHandler);
|
||||
|
||||
Trinity::VerifyOsVersion();
|
||||
|
||||
Trinity::Locale::Init();
|
||||
|
||||
auto configFile = fs::absolute(_TRINITY_BNET_CONFIG);
|
||||
|
||||
@@ -131,6 +131,8 @@ extern int main(int argc, char** argv)
|
||||
{
|
||||
signal(SIGABRT, &Trinity::AbortHandler);
|
||||
|
||||
Trinity::VerifyOsVersion();
|
||||
|
||||
Trinity::Locale::Init();
|
||||
|
||||
auto configFile = fs::absolute(_TRINITY_CORE_CONFIG);
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "Locales.h"
|
||||
#include "MapDefines.h"
|
||||
#include "StringFormat.h"
|
||||
#include "Util.h"
|
||||
#include "adt.h"
|
||||
#include "wdt.h"
|
||||
#include <CascLib.h>
|
||||
@@ -1470,6 +1471,8 @@ static bool RetardCheck()
|
||||
|
||||
int main(int argc, char * arg[])
|
||||
{
|
||||
Trinity::VerifyOsVersion();
|
||||
|
||||
Trinity::Locale::Init();
|
||||
|
||||
Trinity::Banner::Show("Map & DBC Extractor", [](char const* text) { printf("%s\n", text); }, nullptr);
|
||||
|
||||
@@ -393,6 +393,8 @@ std::unordered_map<uint32, std::vector<uint32>> LoadMap(std::string const& local
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
Trinity::VerifyOsVersion();
|
||||
|
||||
Trinity::Locale::Init();
|
||||
|
||||
Trinity::Banner::Show("MMAP generator", [](char const* text) { printf("%s\n", text); }, nullptr);
|
||||
|
||||
@@ -21,9 +21,12 @@
|
||||
#include "TileAssembler.h"
|
||||
#include "Banner.h"
|
||||
#include "Locales.h"
|
||||
#include "Util.h"
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
Trinity::VerifyOsVersion();
|
||||
|
||||
Trinity::Locale::Init();
|
||||
|
||||
Trinity::Banner::Show("VMAP assembler", [](char const* text) { std::cout << text << std::endl; }, nullptr);
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "VMapDefinitions.h"
|
||||
#include "vmapexport.h"
|
||||
#include "Locales.h"
|
||||
#include "Util.h"
|
||||
#include "wdtfile.h"
|
||||
#include "wmo.h"
|
||||
#include <algorithm>
|
||||
@@ -446,6 +447,8 @@ static bool RetardCheck()
|
||||
|
||||
int main(int argc, char ** argv)
|
||||
{
|
||||
Trinity::VerifyOsVersion();
|
||||
|
||||
Trinity::Locale::Init();
|
||||
|
||||
Trinity::Banner::Show("VMAP data extractor", [](char const* text) { printf("%s\n", text); }, nullptr);
|
||||
|
||||
Reference in New Issue
Block a user