Как удалить приложение UWP программно без прав администратора c # - PullRequest
0 голосов
/ 10 октября 2019

Я загрузил приложение UWP на мой клиентский компьютер.

Теперь я хочу удалить программу, но без доступа администратора.

Я обнаружил Remove-AppxPackage , но для этого используется powershell, поэтому потребуется набор executionpolicy, для которого потребуется доступ администратора

Для приложений WPF я просто удалил бы каталог, содержащий приложение, но с приложением UWPЯ даже не уверен, что удалить.

По сути, я хотел бы программно нажать кнопку удаления в окне «Установка и удаление программ»

Я посмотрел по этой ссылке Какудалить приложение программным способом с кодом:

    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 "";
    }

Но мое приложение не нашлось - хотя оно находится на странице настроек «Приложения и функции»

1 Ответ

0 голосов
/ 10 октября 2019

Хорошо, мое решение по совету Нико Чжу состояло в том, чтобы использовать 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");

Этот процесс, на удивление, не требовал прав администратора.

Я должен сказать,хотя с точки зрения разработчика Microsoft UX. Для управления распространением моих приложений UWP, это еще один большой палец вниз для UWP против WPF

...