Question

Pour une application .NET en utilisant ClickOnce INSTALLÉ, est-il possible d'exécuter une action personnalisée au cours du processus de désinstallation.

Plus précisément, je dois supprimer quelques fichiers app connexes (que j'ai créé à la première course) et appelez un service Web au cours du processus de désinstallation.

Toutes les idées?

Était-ce utile?

La solution

Il n'y a aucun moyen de le faire avec ClickOnce lui-même, mais vous pouvez créer une norme bootstrapper Setup.exe qui installe l'application ClickOnce et qui a une action de désinstallation personnalisée.

Notez que cela mais cela crée deux entrées dans la liste Ajout / Suppression de programmes, vous devez cacher 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"

( ici )

Autres conseils

ClickOnce installe une clé de Registre Uninstall dans HKEY_CURRENT_USER qui est 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();
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top