WiX特有的形成记录,但学习足够的XSL是一个挑战。这应该让你开始。你可能有之前更普遍的或后来者去适应你的名字,热参数等
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="1.0"
xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
xmlns:str="http://xsltsl.org/string"
exclude-result-prefixes="wix str"
>
<xsl:output
encoding="utf-8"
method="xml"
version="1.0"
indent="yes"
/>
<xsl:template match='wix:Component[contains(wix:File/@Source, "SourceDir\Prog.exe")]'>
<!-- assumes there is only one Prog.exe -->
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<xsl:comment> added shortcut under Component with File that has Source with Prog.exe </xsl:comment>
<!-- Elsewhere, have an Icon element like: <Icon Id="Prog.exe" SourceFile="$(var.BUILDCACHE)Bin/Prog.exe" /> -->
<Shortcut
Id="ProgExeShortcut"
Name="Prog Application"
Icon="Prog.exe"
Directory="ProgramMenuFolder_ProgVendor"
Advertise="yes">
<xsl:attribute name="WorkingDirectory"><xsl:value-of select="@Directory"/></xsl:attribute>
</Shortcut>
<RemoveFolder
Id="ProgExeShortcut_ProgramMenuFolder_ProgVendor"
Directory="ProgramMenuFolder_ProgVendor"
On="uninstall" />
</xsl:copy>
</xsl:template>
<!-- identity template -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match='/'>
<xsl:comment>*** DO NOT EDIT: Generated by heat.exe; transformed by ProgComponentGroup.xsl</xsl:comment>
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
</xsl:stylesheet>
更具体和更早版本的模板匹配。所以,基础是复制每个元素,属性,文本和注释原样,除了你想改变的东西。对于那些你想改变的东西,你重构所有的东西 - 在这种情况下,通过复制Component元素的所有东西,然后添加Shortcut和RemoveFolder元素。