Pregunta

Para una aplicación .NET instalado mediante ClickOnce, ¿hay alguna forma de ejecutar una acción personalizada durante el proceso de desinstalación.

En concreto, tengo que elimina algunas aplicaciones archivos relacionados (que he creado en la primera ejecución) y llamar a un servicio web durante el proceso de desinstalación.

¿Alguna idea?

¿Fue útil?

Solución

No hay manera de hacer eso con ClickOnce en sí, pero puede crear un programa previo Setup.exe estándar que instala la aplicación ClickOnce y que tiene una acción de desinstalación personalizada.

Tenga en cuenta que esto sin embargo esto crea dos entradas en la opción Agregar / Quitar programas, por lo que necesita para ocultar una de las entradas (la aplicación ClickOnce).

Su último problema será entonces que no hay ninguna opción "desinstalación silenciosa" en la ClickOnce, por lo que podría hacer algo como esto:

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"

(Encontrado aquí )

Otros consejos

ClickOnce instala una clave de registro de desinstalación en HKEY_CURRENT_USER que se puede acceder a la aplicación ClickOnce.

La ubicación específica es "HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall"

Usted tendrá que buscar la llave con el DisplayName de su aplicación.

A continuación, puede envolver la acción normal de desinstalación,

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();
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top