2009-06-16 16 views
6

Cuando desinstalo mi servicio aparece el error donde dice que debo detener tal o cual servicio antes de desinstalarlo. Esto no es satisfactorio: el desinstalador debería detenerlo automáticamente.Wix: detención de un servicio de Windows en la desinstalación

Encontré un blog o una publicación de grupo de noticias hace unos meses y lo hice funcionar correctamente, pero ahora ha dejado de funcionar para mí. Y no tengo un enlace a la publicación ... ¿alguien más sabe dónde está? :) Creo que cambié algo sutil y dejó de funcionar. Encuentro a Wix extremadamente difícil de solucionar.

Estoy usando el siguiente include para recuperar la propiedad X_ WIN_ SERVICE_ NAME (lo siento, no sé cómo evitar _ escapando aquí) del registro. No importa en la instalación porque en ese caso lo configuré explícitamente con un archivo de entrada. Este include 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> 

La siguiente incluyen el componente se utiliza para guardar el valor de registro de 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 comprobado mi sistema después de la instalación y el valor de registro está correctamente escrito allí. La parte en mi componente donde el servicio está configurado se ve así:

  <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?

Respuesta

4

¿Está seguro de que la propiedad X_WIN_SERVICE_NAME tiene el valor correcto en la desinstalación? 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 archivos Include en lugar de simplemente usar Fragments).

+0

tiene razón, debe haber sido algo sutil porque después de algunos cambios no relacionados está funcionando de nuevo: S – evilfred

Cuestiones relacionadas