2009-09-28 22 views
9

Estoy instalando un servicio de Windows usando WiX. ¿Cómo puedo hacer que el servicio se ejecute en el contexto del usuario de Windows que ejecuta el instalador?WiX ServiceInstall: configurar el servicio para que se ejecute como el usuario de Windows actual

+0

¿Por qué le gustaría ejecutar el servicio como el usuario actual? Gran parte del objetivo de un servicio es poder ejecutarlo cuando no hay ningún usuario conectado, y poder ejecutarlo como LocalSystem para facilitar los derechos de administración del ejecutable. Estoy seguro de que tiene una buena razón ... –

+2

Una razón por la que lo ejecutaría como un usuario en particular es que necesita una conexión con el servidor SQL y SQL Server está configurado para usar la Autenticación de Windows ... es más fácil no tener para agregar el "Servicio local" a la lista de usuarios de SQL. –

Respuesta

21

Debe tener el nombre de la cuenta y la contraseña del usuario con el que desea ejecutar el servicio. Pude lograr esto agregando una IU personalizada a mi instalador solicitando un Nombre de usuario y una Contraseña, y luego usando los valores suministrados para los atributos de Cuenta y Contraseña en el elemento ServiceInsall.

Tenga en cuenta que cualquiera que sea la cuenta que se use para ejecutar el servicio deberá tener privilegiado el servicio Iniciar sesión como. Esto no se otorga a los usuarios por defecto. Pude usar el elemento User del esquema UtilExtension para agregar este priveledge al usuario. Agregar el privilegiado al usuario solo tendría éxito si el usuario que ejecuta el instalador es un administrador.

Aquí está el código que utilicé. SERVICECREDENTIALS_USERLOGIN y SERVICECREDENTIALS_PASSWORD son las propiedades que se rellenan desde la IU personalizada.

<Component Id="ServiceEXE" Guid="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"> 
    <File Id="ServiceEXE" Name="YourService.exe" DiskId="1" 
     Source="path\to\YourService.exe" KeyPath="yes" /> 
    <util:User Id="UpdateUserLogonAsService" UpdateIfExists="yes" CreateUser="no" Name="[SERVICECREDENTIALS_USERLOGIN]" 
      LogonAsService="yes" /> 
    <ServiceInstall Id="ServiceInstall" Type="ownProcess" Vital="yes" Name="YourService" 
        DisplayName="Your Service" Description="Your Service description" 
        Start="auto" Account="[SERVICECREDENTIALS_USERLOGIN]" Password="[SERVICECREDENTIALS_PASSWORD]" 
        ErrorControl="normal" Interactive="no" /> 
    <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="YourService" Wait="yes" /> 
</Component> 
+0

puede ayudarme cómo puedo tener 2 componentes 1 para Autenticación SQL y 1 para Autenticación de Windows, es decir, cómo agregar una condición. –

+0

¿Este código funciona en absoluto? al establecer el privilegio LogonAsService * y *, la identidad del servicio no parece programarse secuencialmente en el paquete .msi resultante. Por esta razón, la instalación falla ... ¿O me falta algo? –

Cuestiones relacionadas