mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-12 10:17:22 +01:00
Add console argument/env var to disable legacy corrupted state exceptions policy
This commit is contained in:
parent
cf1d8a81c6
commit
b21a0c9298
8 changed files with 35 additions and 15 deletions
|
|
@ -123,6 +123,7 @@ void from_json(const nlohmann::json& json, DalamudStartInfo& config) {
|
|||
config.BootVehEnabled = json.value("BootVehEnabled", config.BootVehEnabled);
|
||||
config.BootVehFull = json.value("BootVehFull", config.BootVehFull);
|
||||
config.BootEnableEtw = json.value("BootEnableEtw", config.BootEnableEtw);
|
||||
config.BootDisableLegacyCorruptedStateExceptions = json.value("BootDisableLegacyCorruptedStateExceptions", config.BootDisableLegacyCorruptedStateExceptions);
|
||||
config.BootDotnetOpenProcessHookMode = json.value("BootDotnetOpenProcessHookMode", config.BootDotnetOpenProcessHookMode);
|
||||
if (const auto it = json.find("BootEnabledGameFixes"); it != json.end() && it->is_array()) {
|
||||
config.BootEnabledGameFixes.clear();
|
||||
|
|
@ -148,6 +149,7 @@ void DalamudStartInfo::from_envvars() {
|
|||
BootVehEnabled = utils::get_env<bool>(L"DALAMUD_IS_VEH");
|
||||
BootVehFull = utils::get_env<bool>(L"DALAMUD_IS_VEH_FULL");
|
||||
BootEnableEtw = utils::get_env<bool>(L"DALAMUD_ENABLE_ETW");
|
||||
BootDisableLegacyCorruptedStateExceptions = utils::get_env<bool>(L"DALAMUD_DISABLE_LEGACY_CORRUPTED_STATE_EXCEPTIONS");
|
||||
BootDotnetOpenProcessHookMode = static_cast<DotNetOpenProcessHookMode>(utils::get_env<int>(L"DALAMUD_DOTNET_OPENPROCESS_HOOKMODE"));
|
||||
for (const auto& item : utils::get_env_list<std::string>(L"DALAMUD_GAMEFIX_LIST"))
|
||||
BootEnabledGameFixes.insert(unicode::convert<std::string>(item, &unicode::lower));
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ struct DalamudStartInfo {
|
|||
DirectHook = 1,
|
||||
};
|
||||
friend void from_json(const nlohmann::json&, DotNetOpenProcessHookMode&);
|
||||
|
||||
|
||||
enum class ClientLanguage : int {
|
||||
Japanese,
|
||||
English,
|
||||
|
|
@ -61,6 +61,7 @@ struct DalamudStartInfo {
|
|||
bool BootVehEnabled = false;
|
||||
bool BootVehFull = false;
|
||||
bool BootEnableEtw = false;
|
||||
bool BootDisableLegacyCorruptedStateExceptions = false;
|
||||
DotNetOpenProcessHookMode BootDotnetOpenProcessHookMode = DotNetOpenProcessHookMode::ImportHooks;
|
||||
std::set<std::string> BootEnabledGameFixes{};
|
||||
std::set<std::string> BootUnhookDlls{};
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ HINSTANCE g_hGameInstance = GetModuleHandleW(nullptr);
|
|||
|
||||
HRESULT WINAPI InitializeImpl(LPVOID lpParam, HANDLE hMainThreadContinue) {
|
||||
g_startInfo.from_envvars();
|
||||
|
||||
|
||||
std::string jsonParseError;
|
||||
try {
|
||||
from_json(nlohmann::json::parse(std::string_view(static_cast<char*>(lpParam))), g_startInfo);
|
||||
|
|
@ -21,7 +21,7 @@ HRESULT WINAPI InitializeImpl(LPVOID lpParam, HANDLE hMainThreadContinue) {
|
|||
|
||||
if (g_startInfo.BootShowConsole)
|
||||
ConsoleSetup(L"Dalamud Boot");
|
||||
|
||||
|
||||
logging::update_dll_load_status(true);
|
||||
|
||||
const auto logFilePath = unicode::convert<std::wstring>(g_startInfo.BootLogPath);
|
||||
|
|
@ -29,16 +29,16 @@ HRESULT WINAPI InitializeImpl(LPVOID lpParam, HANDLE hMainThreadContinue) {
|
|||
auto attemptFallbackLog = false;
|
||||
if (logFilePath.empty()) {
|
||||
attemptFallbackLog = true;
|
||||
|
||||
|
||||
logging::I("No log file path given; not logging to file.");
|
||||
} else {
|
||||
try {
|
||||
logging::start_file_logging(logFilePath, !g_startInfo.BootShowConsole);
|
||||
logging::I("Logging to file: {}", logFilePath);
|
||||
|
||||
|
||||
} catch (const std::exception& e) {
|
||||
attemptFallbackLog = true;
|
||||
|
||||
|
||||
logging::E("Couldn't open log file: {}", logFilePath);
|
||||
logging::E("Error: {} / {}", errno, e.what());
|
||||
}
|
||||
|
|
@ -59,15 +59,15 @@ HRESULT WINAPI InitializeImpl(LPVOID lpParam, HANDLE hMainThreadContinue) {
|
|||
SYSTEMTIME st;
|
||||
GetLocalTime(&st);
|
||||
logFilePath += std::format(L"Dalamud.Boot.{:04}{:02}{:02}.{:02}{:02}{:02}.{:03}.{}.log", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, GetCurrentProcessId());
|
||||
|
||||
|
||||
try {
|
||||
logging::start_file_logging(logFilePath, !g_startInfo.BootShowConsole);
|
||||
logging::I("Logging to fallback log file: {}", logFilePath);
|
||||
|
||||
|
||||
} catch (const std::exception& e) {
|
||||
if (!g_startInfo.BootShowConsole && !g_startInfo.BootDisableFallbackConsole)
|
||||
ConsoleSetup(L"Dalamud Boot - Fallback Console");
|
||||
|
||||
|
||||
logging::E("Couldn't open fallback log file: {}", logFilePath);
|
||||
logging::E("Error: {} / {}", errno, e.what());
|
||||
}
|
||||
|
|
@ -83,7 +83,7 @@ HRESULT WINAPI InitializeImpl(LPVOID lpParam, HANDLE hMainThreadContinue) {
|
|||
} else {
|
||||
logging::E("Failed to initialize MinHook (status={}({}))", MH_StatusToString(mhStatus), static_cast<int>(mhStatus));
|
||||
}
|
||||
|
||||
|
||||
logging::I("Dalamud.Boot Injectable, (c) 2021 XIVLauncher Contributors");
|
||||
logging::I("Built at: " __DATE__ "@" __TIME__);
|
||||
|
||||
|
|
@ -117,6 +117,7 @@ HRESULT WINAPI InitializeImpl(LPVOID lpParam, HANDLE hMainThreadContinue) {
|
|||
const auto result = InitializeClrAndGetEntryPoint(
|
||||
g_hModule,
|
||||
g_startInfo.BootEnableEtw,
|
||||
!g_startInfo.BootDisableLegacyCorruptedStateExceptions,
|
||||
runtimeconfig_path,
|
||||
module_path,
|
||||
L"Dalamud.EntryPoint, Dalamud",
|
||||
|
|
@ -174,11 +175,11 @@ BOOL APIENTRY DllMain(const HMODULE hModule, const DWORD dwReason, LPVOID lpRese
|
|||
case DLL_PROCESS_DETACH:
|
||||
// do not show debug message boxes on abort() here
|
||||
_set_abort_behavior(0, _WRITE_ABORT_MSG);
|
||||
|
||||
|
||||
// process is terminating; don't bother cleaning up
|
||||
if (lpReserved)
|
||||
return TRUE;
|
||||
|
||||
|
||||
logging::update_dll_load_status(false);
|
||||
|
||||
xivfixes::apply_all(false);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue