2009-07-22 7 views
10

Für eine .NET-Anwendung, die mit ClickOnce installiert wird, gibt es eine Möglichkeit, während der Deinstallation eine benutzerdefinierte Aktion auszuführen.Benutzerdefinierte Aktion bei der Deinstallation (clickonce) - in .NET

Insbesondere muss ich einige app-bezogene Dateien (die ich beim ersten Lauf erstellt) löschen und einen Web-Service während der Deinstallation aufrufen.

Irgendwelche Ideen?

Antwort

3

Das ist mit ClickOnce selbst nicht möglich, aber Sie können einen Standard-Bootstrapper Setup.exe erstellen, der die ClickOnce-Anwendung installiert und über eine benutzerdefinierte Deinstallationsaktion verfügt.

Beachten Sie, dass dies jedoch zwei Einträge in den Add/Remove-Programmen erstellt, so dass Sie einen der Einträge (die Clickonce-App) ausblenden müssen.

Ihr letztes Problem wird dann sein, dass es keine „automatische Deinstallation“ ist die Option 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 here)

1

Clickonce installiert eine Registrierung deinstallieren Geben Sie HKEY_CURRENT_USER ein, auf das Ihre ClickOnce-Anwendung zugreifen kann.

Die spezifische Lage ist „HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ Currentversion \ Uninstall“

Sie werden nach dem Schlüssel mit dem Display Ihrer Anwendung zu suchen.

Sie können dann die normale Deinstallation Aktion wickeln,

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(); 
     } 
    } 
} 
Verwandte Themen