Pregunta

Cuando desinstalo mi servicio, aparece el error donde dice que debo detener dicho servicio antes de desinstalar. Esto no es satisfactorio: el desinstalador debería detenerlo automáticamente.

Encontré un blog o publicación de grupos de noticias hace unos meses y lo hice funcionar correctamente, pero ahora ha dejado de funcionar para mí. Y no tengo un enlace al post ... ¿quizás alguien más sepa dónde está? :) Supongo que cambié algo sutil y dejó de funcionar. Me parece que Wix es extremadamente difícil de solucionar.

Estoy usando la siguiente opción para obtener la propiedad X_ WIN_ SERVICE_ NAME (lo siento, no sé cómo evitar que _ se escape aquí) del registro. No importa en la instalación porque en ese caso lo establecí explícitamente con un archivo de entrada. Esta inclusión se usa antes que cualquier componente en mi archivo wxs.

<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">

<?ifndef SetupXWinServiceRegistryProperties ?>
<?define SetupXWinServiceRegistryProperties ?>

<?define XWinServiceRegistryKey='Software\X\Y'?>

<Property Id="X_WIN_SERVICE_NAME">
  <RegistrySearch Id="XWinServiceNameSearch"
                    Root="HKLM"
                    Key="$(var.XWinServiceRegistryKey)"
                    Name="ServiceName"
                    Type="raw"/>
</Property>

<?endif?>
</Include>

El siguiente componente de inclusión se usa para guardar el valor del registro en la instalación:

<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">

<?ifndef WriteXWinServiceRegistryProperties ?>
<?define WriteXWinServiceRegistryProperties ?>

<Component Id="CompWriteXWinServiceRegistryProps"
  Guid="some guid">

<!-- Write properties to the registry. Then they will be 
       accessable during uninstall. -->

<RegistryValue Root="HKLM"
   Key="$(var.XWinServiceRegistryKey)"
   Name="ServiceName"
   Type="string"
   Value="[X_WIN_SERVICE_NAME]"
   Action="write" />

</Component>

<?endif?>

</Include>

He revisado mi sistema después de la instalación y el valor del registro está escrito correctamente allí. La parte de mi componente donde se configura el servicio es la siguiente:

          <ServiceInstall Id="ServiceInstallXWinService"
                          Name="[X_WIN_SERVICE_NAME]"
                          Start="auto"
                          DisplayName="xxx"
                          Description="yyy"
                          Account="[X_WIN_SERVICE_USER]"
                          Password="[X_WIN_SERVICE_PASSWORD]"
                          Type="ownProcess"
                          ErrorControl="normal"
                          Vital="yes" />

          <ServiceControl Id="ServiceInstallXWinService" 
                          Name="[X_WIN_SERVICE_NAME]"
                          Stop="both"
                          Remove="uninstall"
                          Wait="yes" />

¿Alguna idea?

¿Fue útil?

Solución

¿Estás seguro de que la propiedad X_WIN_SERVICE_NAME está establecida en el valor correcto al desinstalar? Use un archivo de registro detallado para asegurarse de que la búsqueda está configurando el valor correctamente. Todo se ve bien (aunque no sé por qué lo pones todo en Incluir archivos en lugar de usar solo Fragmentos).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top