From 412dfa0c4865728ce529fb0d440e56135b398834 Mon Sep 17 00:00:00 2001 From: Laszlo Nemeth <57342539+donlaci@users.noreply.github.com> Date: Thu, 10 Aug 2023 12:59:36 +0200 Subject: [PATCH] [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 --- src/runner/main.cpp | 9 ++++++++- src/runner/restart_elevated.cpp | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/runner/main.cpp b/src/runner/main.cpp index 6b2db856cb..2a072caeaf 100644 --- a/src/runner/main.cpp +++ b/src/runner/main.cpp @@ -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) diff --git a/src/runner/restart_elevated.cpp b/src/runner/restart_elevated.cpp index 13d4b47136..c14b63d479 100644 --- a/src/runner/restart_elevated.cpp +++ b/src/runner/restart_elevated.cpp @@ -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: