J'ai la source suivante: et je veux modifier installdir vers TargetDir: p> mais seulement si le composant ID = "acuthin.exe". J'ai essayé ce qui suit: p> mais il a changé l'identifiant du composant au lieu de DIRECTALIDEF: P> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="INSTALLDIR">
<Component Id="acuthin.exe" Guid="{F48C7EB0-6192-4F92-8FCB-8DC8517572B5}">
<File Id="acuthin.exe" KeyPath="yes" Source="$(var.HARVESTDIR)\acuthin.exe" />
</Component>
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="Groupacuthin.exeAutoUpdate">
<ComponentRef Id="acuthin.exe" />
</ComponentGroup>
</Fragment>
</Wix>
3 Réponses :
Ce que vous voulez modifier est l'attribut ID de DirectoryRef, mais votre modèle sélectionne réellement un composant d'un enfant de DirectoryRef.
Changez votre modèle à: P>
<xsl:template match="wix:DirectoryRef[@Id='INSTALLDIR' and wix:Component/@Id='acuthin.exe']">
<xsl:copy>
<xsl:attribute name="Id">TARGETDIR</xsl:attribute>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
Veuillez essayer ce code:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="DirectoryRef">
<DirectoryRef>
<xsl:apply-templates select="@* except @Id"/>
<xsl:if test="(@Id='INSTALLDIR') and /Wix/Fragment/ComponentGroup/ComponentRef[@Id='acuthin.exe']">
<xsl:attribute name="Id" select="'TARGETDIR'"/>
</xsl:if>
<xsl:apply-templates/>
</DirectoryRef>
</xsl:template>
Votre @ match = "WIX: DIAMPERRF [@ ID = 'installdir'] / WIX: composant [@ @ id = 'acuthin.exe']" au lieu d'utiliser @ Match = "WIX: DIAMPERRF [@ ID = 'installdir" et WIX: composant/@id=acuthin.exe'] " p>