[Runner]Adding param when restarting to detect restart loop (#27794)

* [Runner] adding param when restarting to detect restart loop

* modifying comment to be more precise

* Adding log for the restart-loop-break scenarios
This commit is contained in:
Laszlo Nemeth
2023-08-10 12:59:36 +02:00
committed by GitHub
parent 7ecfc58caa
commit 412dfa0c48
2 changed files with 10 additions and 3 deletions

View File

@@ -465,6 +465,7 @@ int WINAPI WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR l
const bool elevated = is_process_elevated();
const bool with_dont_elevate_arg = cmdLine.find("--dont-elevate") != std::string::npos;
const bool run_elevated_setting = general_settings.GetNamedBoolean(L"run_elevated", false);
const bool with_restartedElevated_arg = cmdLine.find("--restartedElevated") != std::string::npos;
if (elevated && with_dont_elevate_arg && !run_elevated_setting)
{
@@ -472,8 +473,14 @@ int WINAPI WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR l
schedule_restart_as_non_elevated();
result = 0;
}
else if (elevated || !run_elevated_setting || with_dont_elevate_arg)
else if (elevated || !run_elevated_setting || with_dont_elevate_arg || (!elevated && with_restartedElevated_arg))
{
// The condition (!elevated && with_restartedElevated_arg) solves issue #19307. Restart elevated loop detected, running non-elevated
if (!elevated && with_restartedElevated_arg)
{
Logger::info("Restart as elevated failed. Running non-elevated.");
}
result = runner(elevated, open_settings, settings_window, openOobe, openScoobe);
if (result == 0)

View File

@@ -42,9 +42,9 @@ bool restart_if_scheduled()
switch (state)
{
case RestartAsElevated:
return run_elevated(exe_path.get(), {});
return run_elevated(exe_path.get(), L"--restartedElevated");
case RestartAsElevatedOpenSettings:
return run_elevated(exe_path.get(), L"--open-settings");
return run_elevated(exe_path.get(), L"--restartedElevated --open-settings");
case RestartAsNonElevatedOpenSettings:
return run_non_elevated(exe_path.get(), L"--open-settings", NULL);
case RestartAsNonElevated: