Pergunta

Para uma aplicação .NET instalado usando ClickOnce, há alguma maneira de executar uma ação personalizada durante o processo de desinstalação.

Especificamente, eu preciso excluir arquivos relacionados a aplicativos alguns (que eu criei na primeira execução) e chamar um serviço web durante o processo de desinstalação.

Todas as idéias?

Foi útil?

Solução

Não há nenhuma maneira de fazer isso com a própria ClickOnce, mas você pode criar um bootstrapper Setup.exe padrão que instala o aplicativo ClickOnce e que tem uma ação de desinstalação personalizada.

Note que este no entanto isso cria duas entradas no Adicionar / Remover programas, por isso você precisa esconder uma das entradas (o aplicativo clickonce).

Seu último problema será, então, que não há nenhuma opção "silenciosa desinstalação" na clickonce, então você poderia fazer algo parecido com isto:

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"

(Encontrado aqui )

Outras dicas

ClickOnce instala uma chave de registo Uninstall em HKEY_CURRENT_USER que é acessível para o seu aplicativo ClickOnce.

O local específico é "HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall"

Você terá que procurar a chave com o DisplayName de sua aplicação.

Você pode, em seguida, enrole a ação normal de desinstalação,

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();
        }
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top