Compare commits

...

2 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
f7bdb5d8d3 Implement admin permission checks for update installer
Co-authored-by: yeelam-gordon <73506701+yeelam-gordon@users.noreply.github.com>
2025-08-29 07:10:38 +00:00
copilot-swe-agent[bot]
516e9878a9 Initial plan 2025-08-29 06:58:46 +00:00
4 changed files with 50 additions and 0 deletions

View File

@@ -201,6 +201,13 @@ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
if (action == UPDATE_NOW_LAUNCH_STAGE1)
{
// Check if user has admin permissions before proceeding
if (!check_user_is_admin())
{
Logger::error("Update failed: Administrator permissions required to install updates");
return 1;
}
bool isUpToDate = false;
auto installerPath = ObtainInstaller(isUpToDate);
bool failed = !installerPath.has_value();
@@ -217,6 +224,12 @@ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
}
else if (action == UPDATE_NOW_LAUNCH_STAGE2)
{
// Check if user has admin permissions before proceeding
if (!check_user_is_admin())
{
Logger::error("Update failed: Administrator permissions required to install updates");
return 1;
}
using namespace std::string_view_literals;
const bool failed = !InstallNewVersionStage2(args[2]);
if (failed)

View File

@@ -102,6 +102,14 @@
IsTabStop="{x:Bind ViewModel.IsNoNetwork, Mode=OneWay}"
Severity="Error" />
<!-- Insufficient permissions error -->
<InfoBar
x:Uid="General_InsufficientPermissions"
IsClosable="False"
IsOpen="{x:Bind ViewModel.IsInsufficientPermissions, Mode=OneWay}"
IsTabStop="{x:Bind ViewModel.IsInsufficientPermissions, Mode=OneWay}"
Severity="Error" />
<!-- New version available -->
<InfoBar
x:Uid="General_NewVersionAvailable"

View File

@@ -2414,6 +2414,9 @@ From there, simply click on one of the supported files in the File Explorer and
<data name="General_CantCheck.Title" xml:space="preserve">
<value>Network error. Please try again later</value>
</data>
<data name="General_InsufficientPermissions.Title" xml:space="preserve">
<value>Administrator permissions required. Please restart PowerToys as administrator to install updates.</value>
</data>
<data name="General_DownloadAndInstall.Content" xml:space="preserve">
<value>Download &amp; install</value>
</data>

View File

@@ -260,6 +260,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
private bool _isNewVersionDownloading;
private bool _isNewVersionChecked;
private bool _isNoNetwork;
private bool _isInsufficientPermissions;
private bool _isBugReportRunning;
private bool _settingsBackupRestoreMessageVisible;
@@ -953,6 +954,14 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
}
}
public bool IsInsufficientPermissions
{
get
{
return _isInsufficientPermissions;
}
}
public bool IsBugReportRunning
{
get
@@ -1178,6 +1187,18 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
private void UpdateNowClick()
{
// Check if user has admin permissions before starting update
if (!IsAdmin)
{
_isInsufficientPermissions = true;
NotifyPropertyChanged(nameof(IsInsufficientPermissions));
return;
}
// Clear any previous permission error
_isInsufficientPermissions = false;
NotifyPropertyChanged(nameof(IsInsufficientPermissions));
IsNewVersionDownloading = string.IsNullOrEmpty(UpdatingSettingsConfig.DownloadedInstallerFilename);
NotifyPropertyChanged(nameof(IsDownloadAllowed));
@@ -1299,6 +1320,11 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
_isNoNetwork = PowerToysUpdatingState == UpdatingSettings.UpdatingState.NetworkError;
NotifyPropertyChanged(nameof(IsNoNetwork));
// Clear permission error when updating state changes
_isInsufficientPermissions = false;
NotifyPropertyChanged(nameof(IsInsufficientPermissions));
NotifyPropertyChanged(nameof(IsNewVersionDownloading));
NotifyPropertyChanged(nameof(IsUpdatePanelVisible));
_isNewVersionChecked = PowerToysUpdatingState == UpdatingSettings.UpdatingState.UpToDate && !IsNewVersionDownloading;