2009-09-28 8 views
9

J'installe un service Windows en utilisant WiX. Comment puis-je faire fonctionner le service dans le contexte de Windows User qui exécute le programme d'installation?WiX ServiceInstall - définition du service à exécuter en tant qu'utilisateur Windows en cours

+0

Pourquoi voudriez-vous exécuter le service en tant qu'utilisateur actuel? Une grande partie du but d'un service est de pouvoir s'exécuter lorsqu'il n'y a pas d'utilisateur connecté - et de pouvoir s'exécuter en tant que LocalSystem pour faciliter les droits d'administrateur de l'exécutable. Je suis sûr que vous avez une bonne raison ... –

+2

Une raison pour laquelle vous l'exécutez en tant qu'utilisateur particulier est qu'il a besoin d'une connexion au serveur SQL et que le serveur SQL est configuré pour utiliser l'authentification Windows ... il est plus facile de ne pas avoir ajouter le "Service local" à la liste des utilisateurs SQL. –

Répondre

21

Vous devez avoir à la fois le nom du compte et le mot de passe de l'utilisateur pour lequel vous souhaitez exécuter le service. J'ai été en mesure d'accomplir cela en ajoutant une interface utilisateur personnalisée à mon installateur demandant un nom d'utilisateur et un mot de passe, puis en utilisant les valeurs fournies pour les attributs Compte et Mot de passe sur l'élément ServiceInsall.

Notez que, quel que soit le compte utilisé pour exécuter le service, le privilège d'ouverture de session doit être privilégié. Ceci n'est pas accordé aux utilisateurs par défaut. J'ai été capable d'utiliser l'élément User du schéma UtilExtension pour ajouter ce privilège à l'utilisateur. L'ajout du privilège à l'utilisateur ne réussit que si l'utilisateur exécutant le programme d'installation est un administrateur.

Voici le code que j'ai utilisé. SERVICECREDENTIALS_USERLOGIN et SERVICECREDENTIALS_PASSWORD sont les propriétés remplies à partir de l'interface utilisateur personnalisée.

<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

pouvez-vous m'aider comment puis-je avoir 2 composants 1 pour l'authentification SQL et 1 pour l'authentification Windows, c'est-à-dire comment ajouter une condition. –

+0

Ce code fonctionne-t-il? la définition des privilèges LogonAsService * et * l'identité du service ne semble pas être planifiée de manière séquentielle dans le package .msi résultant. Pour cette raison, l'installation échoue ... Ou est-ce que je manque quelque chose? –

Questions connexes