2012-09-21 15 views
8

Estoy usando Wix 3.6. Tengo un problema, al desinstalar si hay alguna ventana abierta y se muestra en la barra de tareas (esta ventana es parte de mi msi, que estoy tratando de desinstalar), muestra un cuadro de diálogo que le pide al usuario que cierre la aplicación (" La siguiente aplicación debe cerrarse antes de continuar con la instalación ").CerrarAplicación al desinstalar - wix

Intenté lo siguiente, pero no tuve suerte.

<InstallExecuteSequence> 
     <Custom Action="WixCloseApplications" 
       Before="InstallInitialize">Installed</Custom> 
     <Custom Action="StartMonitor" 
       After="StartServices">NOT Installed</Custom> 
    </InstallExecuteSequence> 

    <util:CloseApplication Id="CloseMonitor" Target="Monitor.exe" 
          CloseMessage="yes" RebootPrompt="no"> 
     Installed 
    </util:CloseApplication> 

Quiero que el wix detecte las aplicaciones y las cierre como parte del proceso de desinstalación. No es necesario mostrar el mensaje del cuadro de diálogo. ¿Alguien puede por favor ayudarme a implementarlo?

Funciona bien, se instala desde el símbolo del sistema con el modificador/qn, pero sin el modificador/qn, aparece el cuadro de diálogo ("La siguiente aplicación debe cerrarse antes de continuar con la instalación"). ¿Puede alguien ayudarme en cómo solucionarlo?

+2

he cambiado InstallInitialize a InstallValidate y funcionó bien Instalado –

Respuesta

1

Añadir un evento personalizado C# y añaden que sea el primer evento y el uso InstallUISequence siguiente código para matar el proceso:

try 
{ 
     Process proc = Process.GetProcessesByName("MyApplication"); 
     proc.Kill(); 
} 
catch (Exception ex) 
{ 
     MessageBox.Show(ex.Message.ToString()); 
} 

y si ur soporte de aplicaciones múltiples instancias comienzan a contar el no. de instancias primera:

int count = 0; 
Process[] process = Process.GetProcessesByName("MyApplication"); 
foreach (Process pr in process) 
{ 
    if (pr.MainModule.FileName.Equals(Assembly.GetExecutingAssembly().Location,    StringComparison.OrdinalIgnoreCase)) 
    { 
     count++; 

    } 
} 

Y si usted no está en absoluto utilizando y DllEntry entonces sigue este link

+0

Hola Gracias por la sugerencia, –

+0

Me pidieron que no use C#, por lo que no intenté su sugerencia. –

+0

see wix tiene muy poca acción o función incorporada, por lo que debe usar un código externo. puede ser C# o cualquier otro idioma. –