Programme d'installation WiX: utiliser xslt avec heat.exe pour mettre à jour les attributs
Je suis en train de créer un WiX installateur pour un service de Windows, et que j'ai lu, j'ai besoin de configurer le chemin d'accès clé sur “non” pour tous mes fichiers, à l'exception de l' .exe dans mon WiX script.
Je suis actuellement à la génération de mon Répertoire et de fichier de structure à l'aide de Heat.exe voici ma commande:
"$(WIX)bin\heat.exe" dir $(SolutionDir)EmailGenerationService\bin\PROD
-cg EmailGenFiles -gg -scom -sreg -sfrag -srd -suid
-dr INSTALLLOCATION -var var.FileSource
-t $(Projectdir)KeyPathTransform.xslt
-out $(ProjectDir)DirectoryAndFileComponents.wxs
Il est de mon intention de mettre à jour tous les éléments du fichier avec Keypath=”no”
dans mon DirectoryAndFileComponents.wxs fichier.
Un échantillon de la sortie de chaleur:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="INSTALLLOCATION">
<Component Id="Dollar.Common.dll" Guid="{2BCD0767-2383-47CF-B1BF-325FA4A3264F}">
<File Id="Dollar.Common.dll" KeyPath="yes" Source="$(var.FileSource)\Dollar.Common.dll" />
</Component>
<Component Id="Dollar.Common.Exceptions.dll" Guid="{B7238091-76D1-42F5-A3B4-A539DFF3BD92}">
<File Id="Dollar.Common.Exceptions.dll" KeyPath="yes" Source="$(var.FileSource)\Dollar.Common.Exceptions.dll" />
</Component>
<Component Id="Dollar.Common.Exceptions.pdb" Guid="{43711979-747D-49C9-BAE4-ECD44FAF5E67}">
<File Id="Dollar.Common.Exceptions.pdb" KeyPath="yes" Source="$(var.FileSource)\Dollar.Common.Exceptions.pdb" />
</Component>
<Component Id="Dollar.Common.Logging.dll" Guid="{59F9ABF3-5F68-410C-BC96-0556282F1E04}">
<File Id="Dollar.Common.Logging.dll" KeyPath="yes" Source="$(var.FileSource)\Dollar.Common.Logging.dll" />
</Component>
Ici est le XSLT je suis de passage à chaleur pour effectuer la transformation:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl"
xmlns:wix="http://schemas.microsoft.com/wix/2006/wix"
xmlns:my="my:my">
<xsl:output method="xml" indent="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match='/wix:Wix/wix:Fragment/wix:DirectoryRef/wix:Component/wix:File[@Id and not (@Id="EmailGenerationService.exe")]'>
<xsl:attribute name="KeyPath">
<xsl:value-of select="no"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
J'ai essayé assez peu de variations de cette fonction sur d'autres posts sur ce site et ailleurs, mais encore n'ont pas été en mesure d'obtenir le fichier créé par heat.exe pour avoir de chemin d'accès clé=”no”.
Ai-je raté quelque chose d'évident?
source d'informationauteur Mark Jones
Vous devez vous connecter pour publier un commentaire.
Vous avez différents espaces de noms définis par:
http://schemas.microsoft.com/wix/2006/wi
http://schemas.microsoft.com/wix/2006/wix
Autant que je sache, corriger espace de noms de WiX est
http://schemas.microsoft.com/wix/2006/wi
. Donc, vous devriez corriger votre XSLT.XSLT:
XML d'entrée:
XML de sortie:
Je ne vais pas répondre à votre question initiale. 🙂
Je pense que vous ont induit en erreur. En réalité, la ServiceInstall table a une colonne
Component_
et selon MSDN:Cela ne signifie pas la non-fichiers exe dans d'autres composants doivent avoir
@KeyPath='no'
. Il est seulement dit que le fichier EXE du service doit résider dans une composante distincte et doit être la clé de chemin de celui-ci.Le chemin de clé est un concept très important de la MSI de la technologie. Vous pouvez en lire plus à ce sujet ici, voir la description de la colonne chemin d'accès clé.
Maintenant, si nous revenons à votre question de départ - non, vous n'avez pas à ajuster la production de chaleur la façon dont vous l'avez mentionné. Il va générer le WiX de création vous avez besoin par défaut.
Puis-je suggérer une approche différente?
Il suffit de changer votre modèle d'appariement à la ci-dessus et vous devriez avoir le résultat correct.