visual tutorial toolset studio windows-services wix wix3

windows services - tutorial - El servicio de Windows no se detiene y no se elimina en la desinstalación(Wix)



wix visual studio 2015 (2)

He visto algunas preguntas relacionadas con Stackoverflow que se relacionan con esta, pero ninguna de ellas parece abordar el comportamiento específico que estoy observando.

Tengo un servicio de Windows definido de la siguiente manera en un archivo Wix 3.0 .wxs.

<Component Id=''Service'' Guid=''3c658a54-b236-11e0-bbf6-039615e482ae'' > <File Id=''ServiceEXE'' Name=''m_agent_service.exe'' Vital=''yes'' Source=''../m_agent_service.exe'' KeyPath=''yes'' /> <ServiceInstall Id=''MerakiServiceInstall'' Vital=''yes'' Name=''MerakiPCCAgent'' DisplayName=''Meraki Client Insight Agent $(env.VERSION)'' Description="Meraki Client Insight Monitoring and Management Service" Type=''ownProcess'' Interactive=''no'' Start=''auto'' ErrorControl=''normal''> </ServiceInstall> <ServiceControl Id=''MerakiServiceControl'' Name=''MerakiPCCAgent'' Start=''install'' Stop=''both'' Remove=''uninstall'' Wait=''yes'' /> </Component>

Cuando instalo .MSI, el servicio está instalado y en ejecución. Estupendo.

Cuando desinstalo (ejecutando msiexec / x o usando Agregar / Quitar software del Panel de control), el servicio sigue en funcionamiento y no se elimina. De hecho, el registro del servicio en sí me dice que no se ha invocado el código de apagado del servicio. (Cuando uso "sc stop", por ejemplo, veo que el código de apagado del servicio funciona correctamente).

Aquí hay algunas partes destacadas del registro de desinstalación de msiexec / x:

MSI (s) (14:04) [11:33:54:692]: 1 application(s) had been reported to have files in use. Info 1603. The file C:/Program Files/Meraki/PCC Agent 1.0.67/m_agent_service.exe is being held in use by the following process: Name: m_agent_service, Id: 3120, Window Title: ''(not determined yet)''. Close that application and retry. MSI (c) (40:78) [11:33:54:692]: File In Use: -m_agent_service- Window could not be found. Process ID: 3120 MSI (c) (40:78) [11:33:54:692]: No window with title could be found for FilesInUse [...] Action start 11:33:57: UnpublishFeatures. MSI (s) (14:04) [11:33:57:379]: Doing action: StopServices MSI (s) (14:04) [11:33:57:379]: Note: 1: 2205 2: 3: ActionText Action ended 11:33:57: UnpublishFeatures. Return value 1. Action start 11:33:57: StopServices. MSI (s) (14:04) [11:33:57:379]: Doing action: DeleteServices MSI (s) (14:04) [11:33:57:379]: Note: 1: 2205 2: 3: ActionText Action ended 11:33:57: StopServices. Return value 1. Action start 11:33:57: DeleteServices. MSI (s) (14:04) [11:33:57:379]: Doing action: RemoveFiles [...] MSI (s) (14:04) [11:33:57:645]: Product: Meraki Client Insight Agent -- Removal completed successfully. MSI (s) (14:04) [11:33:57:645]: Windows Installer removed the product. Product N ame: Meraki Client Insight Agent. Product Version: 1.0.67. Product Language: 103 3. Removal success or error status: 0.


Verifique el archivo de registro detallado y asegúrese de que el componente esté siendo modificado. Es posible que la Función esté desactivada o que un Componente / Condición esté causando la omisión del Componente.


¡Oh cariño, mientras estaba en el retrete tuve una idea genial y creo que lo he solucionado yo mismo después de todo, lo siento por la publicación! Creo que voy a explicar lo que solucionó, por si acaso otros principiantes que siguen el mismo libro de Wix que yo se topan con el mismo problema.

Básicamente, cambié el Guid en mi componente, reinstalé, desinstalé y todo funcionó de nuevo. (Tomo en cuenta que cambiar Guids puede no ser la mejor práctica, pero esto funcionó para mí).

Para dar más detalles, creo que en realidad no hubo ningún problema con mi instalador: el problema estaba en la PC que estaba usando para probar la instalación. Mi primer intento de instalar este servicio de Windows se realizó sin ningún elemento ServiceControl, solo el elemento ServiceInstall. Luego probé la instalación, y funcionó, pero el servicio no se eliminó en la desinstalación, obviamente. Luego detuve manualmente y desinstalé el servicio de mi PC usando Services.msc.

Luego leí la siguiente sección de mi libro, me di cuenta de que también necesitaba un elemento de ServiceControl, lo creé y volví a probar el instalador, pero estaba usando el mismo Guid. La desinstalación aún no funcionaba correctamente y supuse que había hecho algo mal en mi instalador, de ahí la publicación anterior.

Lo que supongo que sucedió es que la instalación anterior, utilizando el mismo Guid pero sin el elemento ServiceControl, ocasionó que mi PC se corrompiera de alguna manera y evitó que el nuevo desinstalador se completara correctamente.

Deje que esto sea una lección para mí, ¡nunca pruebe su instalador en su propia PC! Una de esas reglas que entiendo completamente y felizmente ignoro, hasta que me muerde :)