2009-07-11 10 views
14

Sto cercando di ottenere il mio programma di installazione tramite WiX 3.0. Il codice esatto è:WiX: installazione del servizio come LocalService

<File Id="ServiceComponentMain" Name="$(var.myProgramService.TargetFileName)" Source="$(var.myProgramService.TargetPath)" DiskId="1" Vital="yes"/> 

<!-- service will need to be installed under Local Service --> 
<ServiceInstall 
         Id="MyProgramServiceInstaller" 
         Type="ownProcess" 
         Vital="yes" 
         Name="MyProgramAddon" 
         DisplayName="[removed]" 
         Description="[removed]" 
         Start="auto" 
         Account="LocalService" 
         ErrorControl="ignore" 
         Interactive="no"/> 
<ServiceControl Id="StartDDService" Name="MyProgramServiceInstaller" Start="install" Wait="no" /> 
<ServiceControl Id="StopDDService" Name="MyProgramServiceInstaller" Stop="both" Wait="yes" Remove="uninstall" /> 

Il fatto è che per qualche motivo LocalService fallisce sul "Installazione di servizi di" passo, e se lo cambio ad allora i tempi di installazione "LocalSystem" fuori durante il tentativo di avviare il servizio.

Il servizio viene avviato manualmente e all'avvio del sistema e, a tutti gli effetti, funziona alla grande. Ho sentito che ci sono problemi nel far funzionare i servizi direttamente in LocalService, ma Google non aiuta molto perché le risposte di tutti sono state "fatte funzionare a kthx".

Solo cercando di ottenere questo servizio impostato e avviato durante l'installazione, tutto qui. Qualsiasi aiuto? Grazie!

+0

Hai mai trovato una risposta a questo? – Adkins

+0

Si potrebbe voler controllare questo thread (vedere l'ultimo post): http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/ServiceInstall-does-nothing-in-WiX-3-5 -td4972774.html Sembra che sia necessario impostare KeyPath sul file e avere il file nello stesso componente. – Jaans

risposta

10

Hai provato ...

NT AUTHORITY\LocalService 

Per questo doc ...

... ma il nome dell'account deve essere NT AUTHORITY \ LocalService quando si chiama CreateService a prescindere dalla locale o dai risultati imprevisti, può verificarsi .

+0

Penso di averlo provato, ma come "Servizio locale". Proverò senza –

+1

Con Account = "NT AUTHORITY \ LocalService", viene visualizzato quanto segue: "Errore 1923. Impossibile installare il servizio" Nome programma personale "(MyProgramAddon). Verificare di disporre di privilegi sufficienti per installare i servizi di sistema." In questo caso, il programma di installazione è in esecuzione come amministratore in Windows XP. Io sono confuso :-( –

+0

Questo ha funzionato per me su Windows 7. – jcmcbeth

7

di riferimento: ServiceControl Table

La documentazione MSI per ServiceControl Tavola afferma che il 'nome' è il nome della stringa del servizio. Nel tuo codice snipet, il tuo 'Nome' di ServiceControl è impostato su 'ID' per ServiceInstall e non il suo 'Nome'. Così, gli elementi Servicecontrol dovrebbero leggere:

<ServiceControl Id="StartDDService" Name="MyProgramAddon" Start="install" Wait="no" /> 
<ServiceControl Id="StopDDService" Name="MyProgramAddon" Stop="both" Wait="yes" Remove="uninstall" /> 
3

aveva lo stesso problema, ma con account specificati, sono annoiato di esso e creato una CA per avviare il servizio dopo l'installazione è stata completata, invece. Semplicemente non preoccuparti di provare ad avviarlo con MSI, lascialo ad un CA, a meno che tu non abbia qualche informazione di qualità da qualche parte.

BTW utilizzando LocalSystem e un servizio avviato manualmente funziona correttamente. Non ho mai avuto altre varianti per funzionare.

+0

Che cos'è una "CA"? –

+1

@DanCsharpster: Custom Azione, una sorta di componente aggiuntivo per i lavori di Windows Installer http://msdn.microsoft.com/en-us/library/aa368066%28v=vs.85%29.aspx In precedenza dovevano essere scritti in C++, ma ora dovrebbe essere possibile scriverli in C#. http://www.advancedinstaller.com/user-guide/qa-c-sharp-ca.html – RenniePet

+0

Oh, grazie. Grazie! Sì, ho scritto qualche custom azioni per il programma di installazione VS2010 e funzionano abbastanza bene una volta apprese le trucchetti e cosa no. Scusa, non pensavo per trasformarlo in un acronimo. –

1

Si prega di prestare attenzione che nella documentazione per l'elemento ServiceInstall è scritto sull'attributo Account che "L'account con cui avviare il servizio. Valido solo quando ServiceType è ownProcess.". Nel tuo esempio non hai specificato il tipo di servizio ownProcess che potrebbe essere il problema.

+0

Ciao, Si esegue con OwnProcess. Ho ridigitato il codice a mano e credo di aver dimenticato quella direttiva. Grazie comunque! –

2

Ho passato un po 'di tempo a esaminare questo aspetto e ho scoperto che era perché avevo l'attributo keypath impostato sul componente non sul file. Il mio file Wix ora assomiglia:

<Component Id="comp_WF_HOST_18" DiskId="1" KeyPath="no" Guid="3343967A-7DF8-4464-90CA-7126C555A254"> 
    <File Id="file_WF_HOST_18" Checksum="yes" Source="C:\Projects\GouldTechnology\Infrastructure\WorkflowHost\WorkflowHost\bin\Release\WorkflowHost.exe" KeyPath="yes"/> 

     <ServiceInstall 
       Id="workflowHostInstaller" 
       Type="ownProcess" 
       Vital="yes" 
       Name="WorkflowHost" 
       DisplayName="Workflow Host" 
       Start="demand" 
       Account="[WORKFLOW_HOST_USER_ACCOUNT]" 
       Password="[WORKFLOW_HOST_USER_PASSWORD]" 
       ErrorControl="critical" 
       Interactive="no"/> 
    <ServiceControl Id="StartWFService" Name="workflowHostInstaller" Start="install" Stop="both" Remove="both" Wait="no" /> 

</Component> 

Ora ho solo bisogno di capire come dare le autorizzazioni corrette ...

+0

Grazie. KeyPath = "yes" sul mio .exe e "no" su altri eseguibili ha risolto il problema! Questo è un grande aiuto! – TamusJRoyce

3

Ho avuto lo stesso problema. Risulta che ho avuto un refuso nello <ServiceControl Id="StartService" Name="MyServiceName" in cui il mio Name non corrispondeva al nome del servizio che ho specificato nel progetto di servizio quando l'ho creato.

Questo era anche il problema con il mio servizio non è stato disinstallato.

1

Abbiamo avuto lo stesso problema che si verificava solo su computer Windows XP in cui il servizio non poteva essere installato. Alla fine abbiamo scoperto che su XP l'impostazione del nome dal file WiX è ignorata e invece utilizzava il nome del servizio impostato nel codice C#. Ci è capitato di avere un nome nel codice che conteneva spazi bianchi, io. e. "Blah Blah Service", quando questo era impostato sullo stesso nome del file WiX usato su Windows 7, funzionava bene.

3

Mi limiterò a echo il consiglio di aristippus303: non provare ad avviare un servizio con Windows Installer e non impostare alcun account, è sufficiente accettare il valore predefinito di LocalSystem durante l'installazione. Cercare di fare qualsiasi altra cosa è troppo problematico. Windows Installer attende che il servizio indichi che è stato avviato e che ci sono troppe cose che possono andare storte, quali sono i permessi, i diritti e le impostazioni del firewall e i file mancanti e così via, quindi Windows Installer finisce congelato o termina con un errore e l'installazione non è riuscita.

Quello che si vuole fare è specificare nella documentazione che l'utente deve modificare manualmente l'account del servizio (se necessario) e avviare manualmente il servizio dopo aver completato l'installazione, e per risolvere i problemi che si verificano a quel punto. O semplicemente dire all'utente di riavviare in modo che l'opzione di avvio automatico avvii il servizio se sei abbastanza sicuro che non ci saranno problemi.

+0

A proposito, un'altra situazione problematica è che se il tuo servizio è a.Programma di rete e se si installano assembly in GAC, non è possibile avviare il servizio in Windows Installer perché GAC non è ancora stato popolato quando si verifica il tentativo di avviare il servizio. – RenniePet

7

Questo è un altro caso in cui un servizio localsystem può non riuscire a installare con errore 1923: se è già installato un altro servizio con lo stesso DisplayName (ma nome di servizio interno, percorso diverso, ecc.). Ho appena avuto questo successo con me.

+4

+1 Tu! Ti amo! Questo è quasi quello che è successo a me (stesso percorso, nome visualizzato diverso) ma mi ha fatto sulla buona strada. Grazie! – TarkaDaal

10

Assicurarsi che la finestra services.msc sia chiusa quando si installa

+0

Ho avuto lo stesso problema. Perché è così ...? –

+3

Oh per l'amor di Pete. Grazie. – CindyH

+1

O M F G. Davvero? Ho bisogno di una pausa. – juFo

Problemi correlati