Пользовательское действие при удалении (clickonce) - в .NET - PullRequest
10 голосов
/ 22 июля 2009

Для приложения .NET, установленного с помощью ClickOnce, есть ли способ запустить настраиваемое действие во время процесса удаления.

В частности, мне нужно удалить несколько связанных с приложением файлов (которые я создал при первом запуске) и вызвать веб-сервис во время процесса удаления.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 22 июля 2009

Невозможно сделать это с помощью самого ClickOnce, но вы можете создать стандартный загрузчик Setup.exe, который устанавливает приложение ClickOnce и имеет настраиваемое действие удаления.

Обратите внимание, что это, однако, создает две записи в программах установки и удаления, поэтому вам необходимо скрыть одну из записей (приложение clickonce).

Ваша последняя проблема будет в том, что на clickonce нет опции «тихая деинсталляция», поэтому вы можете сделать что-то вроде этого:

On Error Resume Next 

Set objShell = WScript.CreateObject("WScript.Shell")

objShell.Run "taskkill /f /im [your app process name]*"

objShell.Run "[your app uninstall key]"
Do Until Success = True
    Success = objShell.AppActivate("[your window title]")
    Wscript.Sleep 200
Loop
objShell.SendKeys "OK"

(найдено здесь )

2 голосов
/ 01 октября 2016

ClickOnce устанавливает раздел реестра Uninstall в HKEY_CURRENT_USER, который доступен для вашего приложения ClickOnce.

Конкретное расположение: "HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall"

Вам нужно будет найти ключ с помощью DisplayName вашего приложения.

Затем можно выполнить обычное действие удаления,

string registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
Microsoft.Win32.RegistryKey uninstallKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(registryKey);
if (uninstallKey != null)
{
    foreach (String a in uninstallKey.GetSubKeyNames())
    {
        Microsoft.Win32.RegistryKey subkey = uninstallKey.OpenSubKey(a, true);
        // Found the Uninstall key for this app.
        if (subkey.GetValue("DisplayName").Equals("AppDisplayName"))
        {
            string uninstallString = subkey.GetValue("UninstallString").ToString();

            // Wrap uninstall string with my own command
            // In this case a reg delete command to remove a reg key.
            string newUninstallString = "cmd /c \"" + uninstallString +
                " & reg delete HKEY_CURRENT_USER\\SOFTWARE\\CLASSES\\mykeyv" +
                MYAPP_VERSION + " /f\"";
            subkey.SetValue("UninstallString", newUninstallString);
            subkey.Close();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...