diff --git a/code/client/citicore/SEHTableHandler.Win32.cpp b/code/client/citicore/SEHTableHandler.Win32.cpp index d413b35d20..6a0aaa122f 100644 --- a/code/client/citicore/SEHTableHandler.Win32.cpp +++ b/code/client/citicore/SEHTableHandler.Win32.cpp @@ -14,6 +14,8 @@ #include +#include + static void* FindCallFromAddress(void* methodPtr, ud_mnemonic_code mnemonic = UD_Icall, bool breakOnFirst = false) { // return value holder @@ -210,7 +212,8 @@ extern "C" void DLL_EXPORT CoreRT_SetupSEHHandler(void* moduleBase, void* module if (!internalAddress) { // and 2k3 to 7 don't even _have_ Rtlpx - so we directly hook the Rtl* function - if (IsWindows8OrGreater()) + // (Wine's ntdll doesn't match real ntdll's binary layout, so it never finds RtlpxLookupFunctionTable there either. Treat it like a downlevel OS) + if (IsWindows8OrGreater() && !CfxIsWine()) { FatalError("Could not find RtlpxLookupFunctionTable - hooking RtlLookupFunctionTable directly. This will break on a Win8+ system since RtlpxLookupFunctionTable is supposed to exist!\n"); } diff --git a/code/client/launcher/UpdaterUI.cpp b/code/client/launcher/UpdaterUI.cpp index c7c5264d52..80a524e0af 100644 --- a/code/client/launcher/UpdaterUI.cpp +++ b/code/client/launcher/UpdaterUI.cpp @@ -15,6 +15,8 @@ #include "launcher.rc.h" +#include <../citicore/LaunchMode.h> + #include #include @@ -1333,6 +1335,12 @@ std::unique_ptr UI_InitTen() forceOff = true; } + if (CfxIsWine()) + { + // WinRT XAML Islands not implemented in Wine/Proton, fall back to the plain Win32 controls UI. + forceOff = true; + } + #ifdef IS_LAUNCHER forceOff = true; #endif