diff --git a/src/common/notifications/NotificationUtil.h b/src/common/notifications/NotificationUtil.h index 98125a22e7..8fcf3d91d8 100644 --- a/src/common/notifications/NotificationUtil.h +++ b/src/common/notifications/NotificationUtil.h @@ -3,6 +3,7 @@ #include #include #include +#include #include "Generated Files/resource.h" @@ -19,8 +20,11 @@ namespace notifications { using namespace NonLocalizable; + auto settings = PTSettingsHelper::load_general_settings(); + auto enableWarningsElevatedApps = settings.GetNamedBoolean(L"enable_warnings_elevated_apps", true); + static bool warning_shown = false; - if (!warning_shown && !is_toast_disabled(ElevatedDontShowAgainRegistryPath, ElevatedDisableIntervalInDays)) + if (enableWarningsElevatedApps && !warning_shown && !is_toast_disabled(ElevatedDontShowAgainRegistryPath, ElevatedDisableIntervalInDays)) { std::vector actions = { link_button{ button1, RunAsAdminInfoPage }, diff --git a/src/runner/general_settings.cpp b/src/runner/general_settings.cpp index dccd19d167..5c56702ab3 100644 --- a/src/runner/general_settings.cpp +++ b/src/runner/general_settings.cpp @@ -17,6 +17,7 @@ static std::wstring settings_theme = L"system"; static bool run_as_elevated = false; static bool download_updates_automatically = true; static bool enable_experimentation = true; +static bool enable_warnings_elevated_apps = true; json::JsonObject GeneralSettings::to_json() { @@ -40,6 +41,7 @@ json::JsonObject GeneralSettings::to_json() result.SetNamedValue(L"download_updates_automatically", json::value(downloadUpdatesAutomatically)); result.SetNamedValue(L"enable_experimentation", json::value(enableExperimentation)); result.SetNamedValue(L"is_admin", json::value(isAdmin)); + result.SetNamedValue(L"enable_warnings_elevated_apps", json::value(enableWarningsElevatedApps)); result.SetNamedValue(L"theme", json::value(theme)); result.SetNamedValue(L"system_theme", json::value(systemTheme)); result.SetNamedValue(L"powertoys_version", json::value(powerToysVersion)); @@ -58,6 +60,7 @@ json::JsonObject load_general_settings() run_as_elevated = loaded.GetNamedBoolean(L"run_elevated", false); download_updates_automatically = loaded.GetNamedBoolean(L"download_updates_automatically", true) && check_user_is_admin(); enable_experimentation = loaded.GetNamedBoolean(L"enable_experimentation",true); + enable_warnings_elevated_apps = loaded.GetNamedBoolean(L"enable_warnings_elevated_apps", true); return loaded; } @@ -69,6 +72,7 @@ GeneralSettings get_general_settings() .isElevated = is_process_elevated(), .isRunElevated = run_as_elevated, .isAdmin = is_user_admin, + .enableWarningsElevatedApps = enable_warnings_elevated_apps, .downloadUpdatesAutomatically = download_updates_automatically && is_user_admin, .enableExperimentation = enable_experimentation, .theme = settings_theme, @@ -91,6 +95,8 @@ void apply_general_settings(const json::JsonObject& general_configs, bool save) Logger::info(L"apply_general_settings: {}", std::wstring{ general_configs.ToString() }); run_as_elevated = general_configs.GetNamedBoolean(L"run_elevated", false); + enable_warnings_elevated_apps = general_configs.GetNamedBoolean(L"enable_warnings_elevated_apps", true); + download_updates_automatically = general_configs.GetNamedBoolean(L"download_updates_automatically", true); enable_experimentation = general_configs.GetNamedBoolean(L"enable_experimentation", true); diff --git a/src/runner/general_settings.h b/src/runner/general_settings.h index 4f87ffd884..c2b9dcc03d 100644 --- a/src/runner/general_settings.h +++ b/src/runner/general_settings.h @@ -10,6 +10,7 @@ struct GeneralSettings bool isElevated; bool isRunElevated; bool isAdmin; + bool enableWarningsElevatedApps; bool downloadUpdatesAutomatically; bool enableExperimentation; std::wstring theme; diff --git a/src/runner/trace.cpp b/src/runner/trace.cpp index 82522bd0f4..8c0dd74b50 100644 --- a/src/runner/trace.cpp +++ b/src/runner/trace.cpp @@ -52,6 +52,7 @@ void Trace::SettingsChanged(const GeneralSettings& settings) g_hProvider, "GeneralSettingsChanged", TraceLoggingBoolean(settings.isStartupEnabled, "RunAtStartup"), + TraceLoggingBoolean(settings.enableWarningsElevatedApps, "EnableWarningsElevatedApps"), TraceLoggingWideString(settings.startupDisabledReason.c_str(), "StartupDisabledReason"), TraceLoggingWideString(enabledModules.c_str(), "ModulesEnabled"), TraceLoggingBoolean(settings.isRunElevated, "AlwaysRunElevated"), diff --git a/src/settings-ui/Settings.UI.Library/GeneralSettings.cs b/src/settings-ui/Settings.UI.Library/GeneralSettings.cs index 1de3c04030..68648bdfbc 100644 --- a/src/settings-ui/Settings.UI.Library/GeneralSettings.cs +++ b/src/settings-ui/Settings.UI.Library/GeneralSettings.cs @@ -29,6 +29,10 @@ namespace Microsoft.PowerToys.Settings.UI.Library [JsonPropertyName("is_admin")] public bool IsAdmin { get; set; } + // Gets or sets a value indicating whether is warnings of elevated apps enabled. + [JsonPropertyName("enable_warnings_elevated_apps")] + public bool EnableWarningsElevatedApps { get; set; } + // Gets or sets theme Name. [JsonPropertyName("theme")] public string Theme { get; set; } @@ -57,6 +61,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library { Startup = false; IsAdmin = false; + EnableWarningsElevatedApps = true; IsElevated = false; AutoDownloadUpdates = false; EnableExperimentation = true; diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/GeneralPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/GeneralPage.xaml index e866a5524f..b6832d837e 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/GeneralPage.xaml +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/GeneralPage.xaml @@ -209,6 +209,9 @@ + + + diff --git a/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw b/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw index 11ad7a01b8..8af1fc336f 100644 --- a/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw +++ b/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw @@ -1022,6 +1022,12 @@ PowerToys will launch automatically + + Elevated Apps warnings + + + Show notifications about PowerToys functionality issues when running alongside elevated applications. + A Windows Shell extension for more advanced bulk renaming using search & replace or regular expressions. diff --git a/src/settings-ui/Settings.UI/ViewModels/GeneralViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/GeneralViewModel.cs index b68e479db2..17b6e2b142 100644 --- a/src/settings-ui/Settings.UI/ViewModels/GeneralViewModel.cs +++ b/src/settings-ui/Settings.UI/ViewModels/GeneralViewModel.cs @@ -126,6 +126,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels _isElevated = isElevated; _runElevated = GeneralSettingsConfig.RunElevated; + _enableWarningsElevatedApps = GeneralSettingsConfig.EnableWarningsElevatedApps; RunningAsUserDefaultText = runAsUserText; RunningAsAdminDefaultText = runAsAdminText; @@ -150,6 +151,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels private bool _isElevated; private bool _runElevated; private bool _isAdmin; + private bool _enableWarningsElevatedApps; private int _themeIndex; private bool _autoDownloadUpdates; @@ -270,6 +272,24 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels } } + public bool EnableWarningsElevatedApps + { + get + { + return _enableWarningsElevatedApps; + } + + set + { + if (_enableWarningsElevatedApps != value) + { + _enableWarningsElevatedApps = value; + GeneralSettingsConfig.EnableWarningsElevatedApps = value; + NotifyPropertyChanged(); + } + } + } + // Are we running a dev build? (Please note that we verify this in the code that gets the newest version from GitHub too.) public static bool AutoUpdatesDisabledOnDevBuild {