2011-08-03 4 views
0

J'ai une action personnalisée dans Wix pour installer l'un des services pour mon application.Wix Service Installer DLL

<Custom Action='ManagedInstall' After="InstallFinalize"/> 

<CustomAction Id="ManagedInstall" 
        Directory='INSTALLDIR' 
        ExeCommand='"[WindowsFolder]\Microsoft.NET\Framework\v2.0.50727\installUtil.exe" /LogToConsole=false ControlService.dll' 
        Impersonate='yes' 
        Return='check'> 
    </CustomAction> 

Cela fonctionne très bien sous Windows avec XP et 7 (avec UAC élevé) tout ordinateur de bureau, machine virtuelle ou un ordinateur portable à part certains de nos ordinateurs portables avec cryptage.

Si l'on suppose qu'il est parce que l'exécution de la console InstallUtil.exe est interrompue par le cryptage (pour une raison quelconque, il est la seule différence constatée entre les deux systèmes), était d'essayer le travail autour d'une solution pour ce remplacement au-dessus du code d'action personnalisé.

 <Component Id='ControlServiceDLL' Guid='27C58A4E-E1A9-4b85-B048-F8BBB1BF3C76'> 
      <File Id='ControlService.dll' 
       Name='ControlService.dll' 
       DiskId='1' 
       Source='Data\ControlService.dll' 
       Vital='yes' 
       KeyPath='yes'/> 

      <ServiceInstall 
       Id="ControlServiceInstall" 
       Type="shareProcess" 
       Vital='yes' 
       Name='ControlService' 
       DisplayName='Control Service' 
       Description='Control Service Description' 
       Start="demand" 
       ErrorControl='ignore' 
       Interactive="no"> 
      </ServiceInstall> 

      <ServiceControl Id="StartService" Remove="uninstall" Name="Control Service" Wait="yes" /> 
     </Component> 

Et il ne démarre pas au départ, je devais donc supprimer le démarrage/arrêt de contrôle de service pour voir est-il installe. Oui, il s'installe correctement mais ne peut pas démarrer le service manuellement même.

Par observation trouvé ce qui suit peut aider quelqu'un à essayer de m'aider dans cela.

En comparant les propriétés de service dans 2 méthodes différentes, j'ai trouvé ci-dessous Espérons que cela peut aider quelqu'un qui peut répondre à mon problème.

En utilisant l'action personnalisée: \ windows \ SysWOW64 \ dllhost.exe/processId:: Propriétés du service Executable Chemin montre, C {926E3CF4-B966-4E61-A46B-C3C49F579F7C}

Lorsque, en utilisant Install Service

Répondre

-2

Vous pouvez inclure le manifeste d'application avec des privilèges administratifs et ainsi tous les événements seront créés/appelés sous le compte d'administrateur.

Si vous avez un msi alors vous pouvez aller pour l'outil dotnetinstaller, qui va convertir msi en exe et attacher UAC à l'installation. Par conséquent, si l'utilisateur n'a pas de privilèges d'administrateur, le programme d'installation vous le demandera.

+0

Salut Sunil, Merci pour votre réponse. Comme je vois, il n'y a pas de problème avec l'UAC. J'ai déjà fait ce que vous avez dit, cela fonctionne parfaitement. Le vrai problème est de savoir comment enregistrer cette DLL de service à l'aide de Service Call pour obtenir les mêmes propriétés (chemin d'exécution) obtenues à partir de la méthode d'action personnalisée. –

+1

Vous pouvez créer une action personnalisée et l'appeler pour exécuter un fichier .bat contenant du code pour créer et enregistrer un service. –

1

Le problème que vous rencontrez est que vous essayez d'héberger une DLL en tant que service. Un service Windows est un exécutable (exe).

Si vous utilisez Wix 3.0 ou supérieur, aller à l'approche d'action non personnalisée, comme décrit ici, y compris le piège de keypath je suis tombé dans: http://blog.tentaclesoftware.com/archive/2009/01/01/21.aspx

Questions connexes