2016-10-14 3 views
0

Je construis un MSI qui à son tour crée un service Windows.Comment mettre à jour xml avec les propriétés ajoutées par l'action personnalisée

J'ai une action personnalisée qui utilise les archives intégrées dans le MSI, explose. Après quoi, il crée quelques propriétés, qui doivent être mises à jour dans le fichier app.config du msi. J'utilise l'élément <util:xmlFile> de wix pour mettre à jour le fichier de configuration. Mais il ne contient pas les valeurs mises à jour dans les propriétés.

détails de l'action personnalisée: après: InstallFiles Exécuter: "SecondSequence" // Exécuter immédiate lance le fichier n'a pas trouvé une erreur dans l'action personnalisée.

Comment procéder?

+0

Pouvez-vous partager l'util: contenu xmlFile? Vous devez référencer les propriétés de la bonne façon - cela peut parfois être difficile. –

Répondre

0

Util: xmlFile, comme la plupart des choses Wix nécessite des précautions lors de l'utilisation des propriétés. La référence du fichier est la suivante: File = '[# RHSEXECONFIGFILE]' La valeur de référence est la suivante: Value = '[RHS_URL]' où ma propriété est RHS_URL. Et vos informations XPATH doivent être correctes.

Regardez l'exemple simple ci-dessous (volée à partir d'un travail installation)

<Directory Id='ProgramFiles64Folder'> 
    <Directory Id='ROBINHOODCLIENTSERVICE' Name='ROBIN HOOD Client Service'> 
    <Directory Id='INSTALLBINDIR' Name='bin'> 
     <Component Id='MainExecutable' Guid='56F635F6-E52D-4756-A1F2-4A4190B04582' Win64="yes"> 
     <File Id='RHSEXE' Name='RHSClientService.exe' Source='bin\Release\RHSClientService.exe' DiskId='1' Vital='yes' KeyPath='yes' Compressed='yes'></File> 
     <ServiceInstall Id='RHSEXESERVICE' Name='[ProductName]' DisplayName='[ProductName]' Description='RHS Client Service File Processor' Start='auto' Type='ownProcess' ErrorControl='normal' Vital='yes'/> 
     <ServiceControl Id='RHSEXESERVICECONTROL' Name='[ProductName]' Start='install' Stop='both' Remove='uninstall'/> 
     </Component> 
     <Component Id='RHSEXECONFIG' Guid='C26DA00E-BD27-4E99-AB8B-E1586BF90C10' Win64="yes"> 
     <File Id='RHSEXECONFIGFILE' Name='RHSClientService.exe.config' DiskId='1' Source='bin\Release\RHSClientService.exe.config' Vital='yes' Compressed='yes'/> 
     <util:XmlFile Id='XmlSettings1' File='[#RHSEXECONFIGFILE]' 
      Action='setValue' Name='value' Value='[RHS_URL]' ElementPath="//configuration/appSettings/add[\[]@key='RHS.host'[\]]" Permanent="yes" SelectionLanguage="XPath" Sequence='1' /> 
     <util:XmlFile Id='XmlSettings2' File='[#RHSEXECONFIGFILE]' 
      Action='setValue' Name='value' Value='RHS/services/RHSReport' ElementPath="//configuration/appSettings/add[\[]@key='RHS.uri'[\]]" Permanent="yes" SelectionLanguage="XPath" Sequence='2' /> 
     <util:XmlFile Id='XmlSettings3' File='[#RHSEXECONFIGFILE]' 
      Action='setValue' Name='value' Value='[RHS_USERNAME]' ElementPath="//configuration/appSettings/add[\[]@key='RHS.username'[\]]" Permanent="yes" SelectionLanguage="XPath" Sequence='3' /> 
     </Component> 
    </Directory> 
    </Directory> 
</Directory> 
+0

L'exemple de valeur [RHS_URL] est mis à jour à l'exécution par une autre action personnalisée qui traite réellement la manipulation de fichiers fournie dans le programme d'installation. Je dois donc attendre le chargement des composants avant d'appeler cette action personnalisée. Comment puis-je faire cela ? – Karthik

+0

Évidemment dans cet exemple - un écran de configuration rassemble les propriétés avant l'installation. Pour la configuration post-installation, vous devez utiliser une DLL (écrite en C ou C++) qui peut modifier les fichiers ou les entrées de registre pour vous. La DLL serait invoquée via une action personnalisée et pourrait faire n'importe quoi qu'une DLL C++ Windows pourrait faire et vous pourriez le construire avec toutes les bibliothèques statiques ou dynamiques dont vous aviez besoin. Le programme d'installation de Windows ne peut appeler qu'une DLL groupée - il ne peut pas appeler votre application - l'installation n'est techniquement pas terminée. –