Domanda

Per un'applicazione .NET installato tramite ClickOnce, c'è qualche modo per eseguire un'azione personalizzata durante il processo di disinstallazione.

In particolare, ho bisogno di cancellare un file correlati poche app (che ho creato al primo avvio) e chiamare un servizio Web durante il processo di disinstallazione.

Tutte le idee?

È stato utile?

Soluzione

Non c'è modo di farlo con ClickOnce in sé, ma è possibile creare un programma di avvio automatico Setup.exe standard che installa l'applicazione ClickOnce e che ha un'azione di disinstallazione personalizzata.

Si noti che questo però questo crea due voci nel Add / Remove Programs, quindi è necessario per nascondere una delle voci (l'applicazione ClickOnce).

Il problema finale sarà quindi essere che non esiste alcuna opzione "silenziosa di disinstallazione", a ClickOnce, così si potrebbe fare qualcosa di simile:

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"

( qui )

Altri suggerimenti

ClickOnce installa una chiave di registro di disinstallazione in HKEY_CURRENT_USER che è accessibile alla vostra applicazione ClickOnce.

La posizione specifica è "HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall"

Si dovrà cercare la chiave con il DisplayName della vostra applicazione.

È quindi possibile avvolgere la normale azione di disinstallazione,

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();
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top