2009-07-22 11 views
10

Per un'applicazione .NET installata utilizzando ClickOnce, esiste un modo per eseguire un'azione personalizzata durante il processo di disinstallazione.Azione personalizzata alla disinstallazione (clickonce) - in .NET

In particolare, ho bisogno di eliminare alcuni file relativi alle app (che ho creato al primo avvio) e chiamare un servizio Web durante il processo di disinstallazione.

Qualche idea?

risposta

3

Non c'è alcun modo per farlo con ClickOnce stesso, ma è possibile creare un bootstrapper standard Setup.exe che installa l'applicazione ClickOnce e che ha un'azione di disinstallazione personalizzata.

Si noti che questo tuttavia crea due voci nei programmi Aggiungi/Rimuovi, quindi è necessario nascondere una delle voci (l'applicazione clickonce).

Il vostro ultimo problema sarà quindi 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" 

(Trovato here)

1

ClickOnce installa un registro di disinstallazione digita HKEY_CURRENT_USER che è accessibile alla tua 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(); 
     } 
    } 
}