如何在没有管理员访问权限的情况下以编程方式卸载 UWP 应用程序#
How to uninstall a UWP application programmatically without admin access c#
我已将一个 UWP 应用程序旁加载到我的客户端计算机上。
我现在想卸载程序,但没有管理员权限。
我找到了 Remove-AppxPackage,但这使用了 powershell,因此需要一个 executionpolicy
集,这需要 admin 访问权限
对于我的 WPF 应用程序,我只会删除包含该应用程序的目录,但对于 UWP 应用程序,我什至不确定要删除什么。
基本上我想以编程方式单击“添加和删除程序”中的卸载按钮
我确实看过这个 link How to uninstall application programmatically 代码:
public static string GetUninstallCommandFor(string productDisplayName)
{
RegistryKey localMachine = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,RegistryView.Registry64);
string productsRoot = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products";
RegistryKey products = localMachine.OpenSubKey(productsRoot);
string[] productFolders = products.GetSubKeyNames();
foreach (string p in productFolders)
{
RegistryKey installProperties = products.OpenSubKey(p + @"\InstallProperties");
if (installProperties != null)
{
string displayName = (string)installProperties.GetValue("DisplayName");
Debug.WriteLine(displayName);
if ((displayName != null) && (displayName.Contains(productDisplayName)))
{
string uninstallCommand = (string)installProperties.GetValue("UninstallString");
return uninstallCommand;
}
}
}
return "";
}
但这没有找到我的应用程序 - 尽管它在 "Apps and features" 设置页面
好的,根据 Nico Zhu 的建议,我的解决方案是使用 powershell。我创建了一个这样的方法:
private static void LaunchProcess(string uri, string args)
{
var psi = new ProcessStartInfo();
psi.UseShellExecute = true;
psi.CreateNoWindow = false;
psi.Arguments = args;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.FileName = uri;
var proc = Process.Start(psi);
proc.WaitForExit();
var exitcode = proc.ExitCode;
}
并像这样使用它:
LaunchProcess("powershell.exe", "get-appxpackage *AppPackageNameThatOnlyMatchesYourAppPackage* | remove-appxpackage");
令人惊讶的是,这个过程不需要管理员权限。
我必须从微软开发人员的角度说 UX。对于管理我的 UWP 应用程序的分发,这是对 UWP 与 WPF 的又一次反对
我已将一个 UWP 应用程序旁加载到我的客户端计算机上。
我现在想卸载程序,但没有管理员权限。
我找到了 Remove-AppxPackage,但这使用了 powershell,因此需要一个 executionpolicy
集,这需要 admin 访问权限
对于我的 WPF 应用程序,我只会删除包含该应用程序的目录,但对于 UWP 应用程序,我什至不确定要删除什么。
基本上我想以编程方式单击“添加和删除程序”中的卸载按钮
我确实看过这个 link How to uninstall application programmatically 代码:
public static string GetUninstallCommandFor(string productDisplayName)
{
RegistryKey localMachine = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,RegistryView.Registry64);
string productsRoot = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products";
RegistryKey products = localMachine.OpenSubKey(productsRoot);
string[] productFolders = products.GetSubKeyNames();
foreach (string p in productFolders)
{
RegistryKey installProperties = products.OpenSubKey(p + @"\InstallProperties");
if (installProperties != null)
{
string displayName = (string)installProperties.GetValue("DisplayName");
Debug.WriteLine(displayName);
if ((displayName != null) && (displayName.Contains(productDisplayName)))
{
string uninstallCommand = (string)installProperties.GetValue("UninstallString");
return uninstallCommand;
}
}
}
return "";
}
但这没有找到我的应用程序 - 尽管它在 "Apps and features" 设置页面
好的,根据 Nico Zhu 的建议,我的解决方案是使用 powershell。我创建了一个这样的方法:
private static void LaunchProcess(string uri, string args)
{
var psi = new ProcessStartInfo();
psi.UseShellExecute = true;
psi.CreateNoWindow = false;
psi.Arguments = args;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.FileName = uri;
var proc = Process.Start(psi);
proc.WaitForExit();
var exitcode = proc.ExitCode;
}
并像这样使用它:
LaunchProcess("powershell.exe", "get-appxpackage *AppPackageNameThatOnlyMatchesYourAppPackage* | remove-appxpackage");
令人惊讶的是,这个过程不需要管理员权限。
我必须从微软开发人员的角度说 UX。对于管理我的 UWP 应用程序的分发,这是对 UWP 与 WPF 的又一次反对