2009-11-13 25 views
6

Al crear mi instalador de WiX me encontré con un problema al intentar cerrar una aplicación antes de instalar la actualización. A continuación se muestra un ejemplo de cómo estoy tratando de hacer esto.Cerrar una aplicación usando WiX

<util:CloseApplication Id="CloseServe" CloseMessage="yes" Target="server.exe" ElevatedCloseMessage="yes" RebootPrompt="no"/> 
<InstallExecuteSequence>  
    <Custom Action="WixCloseApplications" After="RemoveExistingProducts" /> 
    <RemoveExistingProducts After="InstallInitialize"/> 
    <Custom Action='LaunchApplication' After='InstallFinalize'/> 
    <!--<Custom Action='StopServer' Before='RemoveExistingProducts'/>--> 
</InstallExecuteSequence> 

Usando este ejemplo, la aplicación hace terminar la instalación de cierre, pero se estancó en ese punto y luego se realiza una operación de deshacer. ¿Podría deberse al hecho de que el exe se eliminó antes de tratar de cerrarlo? He intentado cambiar la secuencia para que RemoveExistingProducts se realice después de las aplicaciones WixCloseApplications, pero luego me da un código de error 2613.

+2

Sería estupendo si finalmente explicas cuál fue el error: la respuesta aceptada solo sugiere generar un registro de la instalación ... –

+0

Ha pasado tanto tiempo que honestamente no puedo recordar el problema completo. Sin embargo, el registro me ayudó a rastrearlo. Era un problema de secuencia en el que no se podía cerrar el programa de esta manera antes de eliminar los productos existentes, pero no se podían eliminar los productos existentes si se estaba ejecutando. Un iniciador me ayudó con ese problema. –

Respuesta

7

Puede intentar el registro de la instalación y ver lo que puede rastrear desde allí. Pruebe a ejecutar el instalador desde la consola de comandos, así:

msiexec.exe /i [msi filename] /log [filepath\logfilename.log] 
0

quiero suponer que es necesario cerrar la aplicación que se ejecuta tan pronto como sea posible en el InstallExecuteSequence, y ciertamente antes InstallInitialize que se inicia el instalador de Windows transacción que realiza cambios en el sistema.

Además se debe ejecutar la misma operación ApplicationClose en el InstallUISequence así lo que la aplicación se cierra mientras se desplaza por los menús de instalación de forma interactiva. Toda la instancia de InstallUISe se omite cuando se instala silenciosamente, por lo que también lo necesita en InstallExecuteSequence.

Tenga en cuenta que puede desencadenar accidentalmente rollback en una acción personalizada al devolver un código de código de salida/error que msiexec.exe interpreta como un error. Si la finalización de la acción personalizada no es crucial, desactivo la comprobación de errores para permitir que la instalación continúe. En este caso, eso solo provocaría que se requiera un reinicio.

Si lo que usted está tratando de cerrar o apagar es un servicio, MSI ha incorporado características para hacer frente a este a través de los ServiceControl y ServiceInstall elementos (and others).

Cuestiones relacionadas