使用wix heat.exe收集多个文件时自定义KeyPath项

10

我有很多文件需要在wix的每个用户安装项目中进行收集。

我使用heat.exe来收集文件,但是每个组件中的每个文件都有自己的关键路径属性,而我的文件将复制到“应用程序数据”中,因此必须使用HKCU下的注册表键作为其KeyPath,所以我必须更改XML文件中的每个项。

是否可以通过heat.exe完成?我有数千个文件要收集,手动修复太可怕了。


1
类似的问题在这里:https://dev59.com/j2sz5IYBdhLWcg3wOlSh - Adam Butler
2个回答

7
使用这个 xslt 来定制具有子节点的节点的 KeyPath 项。
<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/wi"
        xmlns:my="my:my">

    <xsl:output method="xml" indent="yes" />

    <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:ComponentGroup/wix:Component'>
        <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:attribute name="KeyPath">
            <xsl:text>no</xsl:text>
            </xsl:attribute>
            <xsl:apply-templates select="node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

这篇文章参考了@KirillPolishchuk的答案 https://dev59.com/j2sz5IYBdhLWcg3wOlSh#8035049


1
据我所知,Heat不支持此功能。但是,您可以将XSL模板应用于Heat输出,并调整最终的wxs文件以满足您的需求。有关更多详细信息,请参见heat.exe的-t:开关。

谢谢Yan,你能给我更多的信息吗?你的意思是说,-t可以解决我的问题吗?能告诉我更多吗?我在官方文档中找不到答案。 - Dafan Dong
请查看heat.exe的帮助文本。您可以指定-t:transform.xslt,并在该转换中对heat.exe最初生成的XML进行任何修改。例如,在您的情况下,您可以创建一个模板,将其“匹配”到组件元素并向每个元素添加注册表键(如果我正确理解您的要求)。但是您应该明白,输出XML的责任在于您。这将需要至少基本的XSLT转换语言知识... - Yan Sklyarenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接