Frage

Für eine .NET-Anwendung installiert Clickonce verwendet, ist es eine Möglichkeit, eine benutzerdefinierte Aktion während der Deinstallation ausgeführt werden.

Insbesondere, ich brauche ein paar App zugehörigen Dateien löschen (die ich bei der ersten Ausführung erstellt) und einen Web-Service während der Deinstallation aufrufen.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Es gibt keine Möglichkeit, das zu tun, mit Clickonce selbst, aber Sie können eine Standard-Setup.exe Bootstrap erstellen, die die Clickonce-Anwendung installiert und die eine benutzerdefinierte Deinstallation Aktion.

Beachten Sie, dass dies jedoch diese zwei Einträge in den Hinzufügen erstellt / Programme entfernen, so dass Sie einen der Einträge (die Clickonce app) zu verstecken brauchen.

Ihr letztes Problem wird dann sein, dass es keine „automatische Deinstallation“ Option ist auf Clickonce, so dass Sie so etwas tun könnten:

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"

(Gefunden hier )

Andere Tipps

Clickonce installiert einen Uninstall-Registrierungsschlüssel in HKEY_CURRENT_USER, die auf Ihre Clickonce-Anwendung zugänglich ist.

Die besondere Lage ist "HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ Currentversion \ Uninstall"

Sie müssen für den Schlüssel mit dem Display Ihrer Anwendung suchen.

Sie können dann wickeln die normale Deinstallation Aktion,

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();
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top