Question

Comment puis-je installer un service avec quelques fichiers supplémentaires dans WiX et définir quel fichier est le fichier EXE de service réel?

Scénario: j'avais un service qui était juste un seul fichier EXE et installé comme un service Windows NT dans WiX avec ce code:

<Component Id='InstallMyServiceComponent' Guid='{....}' DiskId='1'>
   <File Id='InstallMyServiceEXEFile' LongName='MyService.exe' 
         Name='MyServ.exe' src='MyService/bin/release/MyService.exe' KeyPath='yes'/>
   <ServiceInstall Id='InstallMyService' Name='MyService' Description='My Service'
         ErrorControl='normal' Start='auto' Type='ownProcess' Vital='yes' />
   <ServiceControl Id='UninstallMyService' Name='MyService' Remove='uninstall' 
         Wait='yes' />
</Component>
<Component Id='RunMyServiceComponent' Guid='.......'>
   <ServiceControl Id='RunMyService' Name='MyService' Start='install' 
         Stop='uninstall' Wait='no' />
</Component>

et j'avais une caractéristique qui permettrait ensuite d'installer et éventuellement démarrer ce service.

Maintenant, mon problème est - aujourd'hui mon service a augmenté, et le seul fichier exécutable n'est plus un seul EXE -. Il est plusieurs fichiers, EXE, DLL, et quelques fichiers de support

Cependant, comment puis-je installer maintenant ??

J'ai essayé d'avoir un composant avec tous mes fichiers

<Component Id="MyService" Guid="......" DiskId="1">
  <File Id="fileMyService_framework_dll" LongName="Framework.dll" 
        Name="Framewrk.DLL" src="MyService\Framework.dll" />
  <File Id="fileMyService_dal_dll" LongName="MyServiceDAL.dll" 
        Name="SrvcDAL.DLL" src="MyService\ServiceDAL.dll" />
  <File Id="fileMyService_helpers_dll" LongName="Helpers.dll" 
        Name="Helpers.DLL" src="MyService\Helpers.dll" />
  <File Id="fileMyService_exe" LongName="MyService.exe" 
        Name="MySrv.EXE" src="MyService\MyService.exe" />
</Component>

Tout d'abord, j'ai essayé d'ajouter simplement les balises ServiceInstalle et serviceControl à ce composant:

<Component Id="MyService" Guid="......" DiskId="1">
  <File Id="fileMyService_framework_dll" LongName="Framework.dll" 
        Name="Framewrk.DLL" src="MyService\Framework.dll" />
  <File Id="fileMyService_dal_dll" LongName="MyServiceDAL.dll" 
        Name="SrvcDAL.DLL" src="MyService\ServiceDAL.dll" />
  <File Id="fileMyService_helpers_dll" LongName="Helpers.dll" 
        Name="Helpers.DLL" src="MyService\Helpers.dll" />
  <File Id="fileMyService_exe" LongName="MyService.exe" 
        Name="MySrv.EXE" src="MyService\MyService.exe" />
   <ServiceInstall Id='InstallMyService' Name='MyService' 
        Description='My Service' ErrorControl='normal' Start='auto' 
        Type='ownProcess' Vital='yes' />
   <ServiceControl Id='UninstallMyService' Name='MyService' 
        Remove='uninstall' Wait='yes' />
</Component>

mais mon « Framework.dll » se défini comme le chemin source pour le service en cours de création ........

Je pensais que je créerais un second composant à installer effectivement le service, en utilisant ServiceInstalle, et je venais de référence qui fichier EXE de service à l'aide fileRef - mais cela ne semble pas exister (au moins en Wix2).

<Component Id='InstallMyServiceComponent' Guid='{....}' DiskId='1'>
   <FileRef Id='fileMyService_exe' KeyPath='yes'/>
   <ServiceInstall Id='InstallMyService' Name='MyService' 
         Description='My Service' ErrorControl='normal' Start='auto' 
         Type='ownProcess' Vital='yes' />
   <ServiceControl Id='UninstallMyService' Name='MyService' 
         Remove='uninstall' Wait='yes' />
</Component>

- ce qui est un pauvre auteur WiX dois faire pour installer tous les fichiers nécessaires, et toujours obtenir l'installation de service NT pour récupérer le fichier EXE correct (pas seulement un fichier arbitraire de la liste des fichiers du composant) ??

Marc

Était-ce utile?

La solution

L'élément ServiceInstall finira par pointer à la « KeyPath » du composant le ServiceInstalle est. Par défaut le jeu d'outils WiX prend le premier fichier ou élément RegistryKey dans votre composant comme KeyPath. Lorsque vous avez ajouté des fichiers à votre composant, le .dll en haut de la liste devient le KeyPath.

En général, les petits composants sont meilleurs que les plus grands. Ainsi, une meilleure solution serait de placer vos DLL dans les composants séparés. Ensuite, vous pouvez laisser l'élément de fichier .exe et l'élément ServiceInstalle dans le même composant. Cela le rend très propre.

Si vous voulez alors le « service » regroupés, vous pouvez créer un élément de ComponentGroup et de mettre ComponentRefs au .exe et .dll composants. Maintenant, vous avez une seule chose que vous pouvez faire référence à partir d'une fonction / ComponentGroupRef.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top