2009-09-28 11 views
9

Sto installando un servizio Windows utilizzando WiX. Come posso far funzionare il servizio nel contesto dell'utente Windows che esegue il programma di installazione?WiIn ServiceInstall - impostazione del servizio da eseguire come utente corrente di Windows

+0

Perché si desidera eseguire il servizio come utente corrente? Gran parte del servizio è in grado di essere eseguito quando non vi sono utenti connessi e di essere in grado di eseguire come LocalSystem per facilitare i diritti di amministrazione per l'eseguibile. Sono sicuro che hai una buona ragione ... –

+2

Un motivo per cui lo avresti eseguito come utente particolare è che ha bisogno di una connessione al server SQL e il server SQL è configurato per utilizzare l'autenticazione di Windows ... è più facile non avere per aggiungere il "Servizio locale" all'elenco di utenti SQL. –

risposta

21

È necessario disporre sia del nome account sia della password per l'utente per il quale si desidera eseguire il servizio. Sono stato in grado di farlo aggiungendo un'interfaccia utente personalizzata al mio programma di installazione chiedendo un nome utente e una password, quindi utilizzando i valori forniti per gli attributi Account e Password nell'elemento ServiceInsall.

Si noti che per qualsiasi account utilizzato per l'esecuzione del servizio sarà necessario privilegiare il servizio Accesso come. Questo non è concesso agli utenti per impostazione predefinita. Sono stato in grado di utilizzare l'elemento User dallo schema UtilExtension per aggiungere questo privilegio all'utente. L'aggiunta del privilegio all'utente avrà esito positivo solo se l'utente che esegue il programma di installazione è un amministratore.

Ecco il codice che ho usato. SERVICECREDENTIALS_USERLOGIN e SERVICECREDENTIALS_PASSWORD sono le proprietà popolate dall'interfaccia utente personalizzata.

<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

puoi aiutarmi come posso avere 2 componenti 1 per l'autenticazione SQL e 1 per l'autenticazione di Windows, ad esempio come aggiungere condizioni. –

+0

Funziona questo codice? impostando il privilegio LogonAsService * e * l'identità del servizio non sembra essere pianificata in modo sequenziale nel pacchetto .msi risultante. Per questo motivo, l'installazione fallisce ... O mi sto perdendo qualcosa? –

Problemi correlati