mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-16 11:48:06 +01:00
[Runner] Open settings when restarted as admin (#9463)
* open settings from runner * Update src/runner/main.cpp * Update src/runner/main.cpp Co-authored-by: Enrico Giordani <enricogior@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
d92ff6d45d
commit
3715b8c5f2
@@ -77,7 +77,7 @@ void open_menu_from_another_instance()
|
|||||||
PostMessageW(hwnd_main, WM_COMMAND, ID_SETTINGS_MENU_COMMAND, 0);
|
PostMessageW(hwnd_main, WM_COMMAND, ID_SETTINGS_MENU_COMMAND, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int runner(bool isProcessElevated)
|
int runner(bool isProcessElevated, bool openSettings)
|
||||||
{
|
{
|
||||||
std::filesystem::path logFilePath(PTSettingsHelper::get_root_save_folder_location());
|
std::filesystem::path logFilePath(PTSettingsHelper::get_root_save_folder_location());
|
||||||
logFilePath.append(LogSettings::runnerLogPath);
|
logFilePath.append(LogSettings::runnerLogPath);
|
||||||
@@ -156,6 +156,11 @@ int runner(bool isProcessElevated)
|
|||||||
|
|
||||||
Trace::EventLaunch(get_product_version(), isProcessElevated);
|
Trace::EventLaunch(get_product_version(), isProcessElevated);
|
||||||
|
|
||||||
|
if (openSettings)
|
||||||
|
{
|
||||||
|
open_settings_window();
|
||||||
|
}
|
||||||
|
|
||||||
result = run_message_loop();
|
result = run_message_loop();
|
||||||
}
|
}
|
||||||
catch (std::runtime_error& err)
|
catch (std::runtime_error& err)
|
||||||
@@ -404,6 +409,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
|||||||
modules();
|
modules();
|
||||||
|
|
||||||
auto general_settings = load_general_settings();
|
auto general_settings = load_general_settings();
|
||||||
|
const bool openSettings = std::string(lpCmdLine).find("--open-settings") != std::string::npos;
|
||||||
|
|
||||||
// Apply the general settings but don't save it as the modules() variable has not been loaded yet
|
// Apply the general settings but don't save it as the modules() variable has not been loaded yet
|
||||||
apply_general_settings(general_settings, false);
|
apply_general_settings(general_settings, false);
|
||||||
@@ -411,13 +417,14 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
|||||||
const bool elevated = is_process_elevated();
|
const bool elevated = is_process_elevated();
|
||||||
if ((elevated ||
|
if ((elevated ||
|
||||||
general_settings.GetNamedBoolean(L"run_elevated", false) == false ||
|
general_settings.GetNamedBoolean(L"run_elevated", false) == false ||
|
||||||
strcmp(lpCmdLine, "--dont-elevate") == 0))
|
std::string(lpCmdLine).find("--dont-elevate") != std::string::npos))
|
||||||
{
|
{
|
||||||
result = runner(elevated);
|
|
||||||
|
result = runner(elevated, openSettings);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
schedule_restart_as_elevated();
|
schedule_restart_as_elevated(openSettings);
|
||||||
result = 0;
|
result = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,15 +7,17 @@ enum State
|
|||||||
{
|
{
|
||||||
None,
|
None,
|
||||||
RestartAsElevated,
|
RestartAsElevated,
|
||||||
|
RestartAsElevatedOpenSettings,
|
||||||
RestartAsNonElevated
|
RestartAsNonElevated
|
||||||
};
|
};
|
||||||
static State state = None;
|
static State state = None;
|
||||||
|
|
||||||
void schedule_restart_as_elevated()
|
void schedule_restart_as_elevated(bool openSettings)
|
||||||
{
|
{
|
||||||
state = RestartAsElevated;
|
state = openSettings ? RestartAsElevatedOpenSettings : RestartAsElevated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void schedule_restart_as_non_elevated()
|
void schedule_restart_as_non_elevated()
|
||||||
{
|
{
|
||||||
state = RestartAsNonElevated;
|
state = RestartAsNonElevated;
|
||||||
@@ -36,6 +38,8 @@ bool restart_if_scheduled()
|
|||||||
{
|
{
|
||||||
case RestartAsElevated:
|
case RestartAsElevated:
|
||||||
return run_elevated(exe_path.get(), {});
|
return run_elevated(exe_path.get(), {});
|
||||||
|
case RestartAsElevatedOpenSettings:
|
||||||
|
return run_elevated(exe_path.get(), L"--open-settings");
|
||||||
case RestartAsNonElevated:
|
case RestartAsNonElevated:
|
||||||
return run_non_elevated(exe_path.get(), L"--dont-elevate", NULL);
|
return run_non_elevated(exe_path.get(), L"--dont-elevate", NULL);
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
void schedule_restart_as_elevated();
|
void schedule_restart_as_elevated(bool openSettings);
|
||||||
void schedule_restart_as_non_elevated();
|
void schedule_restart_as_non_elevated();
|
||||||
bool is_restart_scheduled();
|
bool is_restart_scheduled();
|
||||||
bool restart_if_scheduled();
|
bool restart_if_scheduled();
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ std::optional<std::wstring> dispatch_json_action_to_module(const json::JsonObjec
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
schedule_restart_as_elevated();
|
schedule_restart_as_elevated(true);
|
||||||
PostQuitMessage(0);
|
PostQuitMessage(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user