2009-07-22 13 views
10

Pour une application .NET installée avec ClickOnce, existe-t-il un moyen d'exécuter une action personnalisée pendant le processus de désinstallation? En particulier, je dois supprimer quelques fichiers liés aux applications (que j'ai créés lors de la première exécution) et appeler un service Web pendant le processus de désinstallation.Action personnalisée lors de la désinstallation (clickonce) - in .NET

Des idées?

Répondre

3

Il n'existe aucun moyen de le faire avec ClickOnce lui-même, mais vous pouvez créer un programme d'amorçage Setup.exe standard qui installe l'application ClickOnce et qui possède une action de désinstallation personnalisée.

Notez que cela crée cependant deux entrées dans les programmes Ajout/Suppression, vous devez donc masquer l'une des entrées (l'application clickonce).

Votre dernier problème sera alors qu'il n'y a pas d'option « désinstallation silencieuse » sur clickonce, de sorte que vous pouvez faire quelque chose comme ceci:

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" 

(Trouvé here)

1

ClickOnce installe un registre de désinstallation entrez HKEY_CURRENT_USER accessible à votre application ClickOnce.

L'emplacement spécifique est "HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall"

Vous devez rechercher la clé avec le DisplayName de votre application.

Vous pouvez ensuite envelopper l'action de désinstallation normale,

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