Skip to content

Commit

Permalink
[Runner] Open settings when restarted as admin (#9463)
Browse files Browse the repository at this point in the history
* open settings from runner

* Update src/runner/main.cpp

* Update src/runner/main.cpp

Co-authored-by: Enrico Giordani <enricogior@users.noreply.github.com>
  • Loading branch information
davidegiacometti and enricogior committed Feb 10, 2021
1 parent d92ff6d commit 3715b8c
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 8 deletions.
15 changes: 11 additions & 4 deletions src/runner/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ void open_menu_from_another_instance()
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());
logFilePath.append(LogSettings::runnerLogPath);
Expand Down Expand Up @@ -156,6 +156,11 @@ int runner(bool isProcessElevated)

Trace::EventLaunch(get_product_version(), isProcessElevated);

if (openSettings)
{
open_settings_window();
}

result = run_message_loop();
}
catch (std::runtime_error& err)
Expand Down Expand Up @@ -404,20 +409,22 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
modules();

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_general_settings(general_settings, false);
int rvalue = 0;
const bool elevated = is_process_elevated();
if ((elevated ||
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
{
schedule_restart_as_elevated();
schedule_restart_as_elevated(openSettings);
result = 0;
}
}
Expand Down
8 changes: 6 additions & 2 deletions src/runner/restart_elevated.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,17 @@ enum State
{
None,
RestartAsElevated,
RestartAsElevatedOpenSettings,
RestartAsNonElevated
};
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()
{
state = RestartAsNonElevated;
Expand All @@ -36,6 +38,8 @@ bool restart_if_scheduled()
{
case RestartAsElevated:
return run_elevated(exe_path.get(), {});
case RestartAsElevatedOpenSettings:
return run_elevated(exe_path.get(), L"--open-settings");
case RestartAsNonElevated:
return run_non_elevated(exe_path.get(), L"--dont-elevate", NULL);
default:
Expand Down
2 changes: 1 addition & 1 deletion src/runner/restart_elevated.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#pragma once
void schedule_restart_as_elevated();
void schedule_restart_as_elevated(bool openSettings);
void schedule_restart_as_non_elevated();
bool is_restart_scheduled();
bool restart_if_scheduled();
Expand Down
2 changes: 1 addition & 1 deletion src/runner/settings_window.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ std::optional<std::wstring> dispatch_json_action_to_module(const json::JsonObjec
}
else
{
schedule_restart_as_elevated();
schedule_restart_as_elevated(true);
PostQuitMessage(0);
}
}
Expand Down

0 comments on commit 3715b8c

Please sign in to comment.