gpt4 book ai didi

xslt - WiX:在卸载或升级时保留 Heat 收集的文件

转载 作者:行者123 更新时间:2023-12-02 04:33:58 26 4
gpt4 key购买 nike

我正在使用热量从 .csproj 文件中获取二进制文件。这工作正常,但是,当我卸载或升级应用程序时,我想将收获的文件“MyApp”.exe.config 保留在安装目录中,以便用户不会丢失其默认设置。我是否需要应用专门的 XSLT 转换以及 heat 命令?或者,由于收获的结果只是片段中的几个组件,也许最好手动添加文件,这样我就可以单独控制每个文件?我是 WiX 的新手,在找到这个问题的答案时遇到了一些困难。

感谢您的建议!

最佳答案

如果将以下内容保存到名为例如的文件中transform.xslt 并将 -t transform.xslt 添加到热命令行,热结果应该被转换,并将添加 Permanent- MyApp.exe.config 的属性:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
xmlns="http://schemas.microsoft.com/wix/2006/wi"
exclude-result-prefixes="wix">

<xsl:template match="wix:Wix">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>

<xsl:template match="wix:Component">

<!-- Just copy the tag itself -->
<xsl:copy>
<!-- Copy all attributes -->
<xsl:apply-templates select="@*" />

<!-- Here comes the distinction: if you find our special component, do some special things -->
<xsl:choose>
<!-- Note that the string is translated to all lower case, so you don't have to care about being case sensitive or not -->
<xsl:when test="translate(@Id,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'myapp.exe.config'">
<!-- Here we will add the Permanent-attribute to this very special component -->
<xsl:attribute name="Permanent">yes</xsl:attribute>
</xsl:when>
</xsl:choose>

<!-- Now take the rest of the inner tag -->
<xsl:apply-templates select="node()" />
</xsl:copy>

</xsl:template>

<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>

</xsl:stylesheet>

根据 WiX 帮助文件,Permanent 属性执行以下操作: 如果此属性设置为“yes”,则安装程序不会在卸载期间删除该组件。安装程序在 Windows Installer 注册表设置中为该组件注册一个额外的系统客户端(这基本上意味着至少有一个产品始终引用该组件)。请注意,此选项与不设置 guid 的行为不同,因为虽然该组件是永久性的,但它仍然是可修补的(因为 Windows Installer 仍然跟踪它),只是不可卸载。

请注意,我已将文件名添加为小写字母,因此无需检查 MyApp.exe.config,而是添加所有小写字母“myapp.exe.config”。这样您就不必处理小写/大写问题。另请注意,我假设您使用 -suid -选项进行加热,即不是为每个组件创建带有随机字母/数字的 Id,而是每个组件通常将其文件名作为 Id。

关于xslt - WiX:在卸载或升级时保留 Heat 收集的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22418172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com