【问题标题】:How do I stop removal of files during uninstallation using Wix如何在使用 Wix 卸载期间停止删除文件
【发布时间】:2020-04-19 20:41:03
【问题描述】:

卸载我的应用程序时,我想将 Wix 设置配置为 NOT 以删除作为安装一部分添加的几个文件。卸载程序似乎从 MSI 文件中删除了所有最初安装的文件。我怎么做?

这是我希望永久保存的文件

<Binary Id="RootCABinary" SourceFile="Assets\Certificates\RootCA.cer" />
<Binary Id="SubCABinary" SourceFile="Assets\Certificates\SubCA.cer" />

我已使用WixIIsExtension.dll 将这些证书安装到 Windows 商店。

【问题讨论】:

    标签: wix windows-installer


    【解决方案1】:

    覆盖:文件永远不会被覆盖重要吗?如果是这样,添加 “从不覆盖”到您的组件。 WiX 属性:NeverOverwrite="yes"。记得测试升级场景!


    永久组件:正如 Pavel 所说,您可以将组件设置为永久:

    <Component Permanent="yes">
        <File Source="License.rtf" />
    </Component>
    

    空白 GUID:另一种方法是设置 blank component GUID。它本质上意味着"install and then leave alone"。不应该进行修复或卸载(如果文件不应该被覆盖,请记住添加 NeverOverwrite="yes"):

    <Component Guid="" Feature="MainApplication">
        <File Source="SubCA.cer" KeyPath="yes" />
    </Component>
    

    只读复制:我有时将文件安装到 per-machine path(例如程序文件下的某处)然后复制它们在应用程序启动时发送到 per-user location(在用户配置文件中的某处),然后对它们执行不应该删除文件的操作。这在您想要更改相关文件(它们需要可写)的情况下非常有用。然后最好将它们从部署问题中“解开”(文件根本不会被安装程序操作干预 - 安装程序不知道它们)。安装到程序文件的原始只读副本可以卸载(不再需要?)。


    其他方法:您还可以在安装期间使用自定义操作创建此类文件(通常仅文本文件),您可以从您的网站下载相关文件应用程序启动(使文件易于管理和更新/替换?易受连接问题的影响 - 防火墙等......)并且应用程序可以在启动时使用主可执行文件中的“内部默认值”创建文件。毫无疑问,还有一些我记不起的方法。

    【讨论】:

    • 另一种不需要任何特殊 WiX 创作的方法:定期安装文件。让程序将文件的“最后修改”日期修改为晚于“创建”日期(如果程序实际修改文件,这种情况会定期发生)。这是可行的,因为 MSI 的规则之一是永远不要删除通过比较创建日期和修改日期检测到的“用户修改文件”。如果它们不同,则假定该文件由用户修改。虽然我认为这仅适用于未版本化的文件。
    • 是的,覆盖将被阻止,但不是“恢复”,因为文件被卸载然后重新安装使其看起来被覆盖? (对于早期的 RemoveExistingProducts 重大升级,所有文件在重新安装之前都被删除/卸载)。
    • 我没有看到证书复制事件的日志!我必须明确启用什么?
    • "文件被卸载然后重新安装" -- MSI 既不会卸载也不会覆盖已修改的未版本化文件。也许我不明白你想说什么。
    • 我没有看到您将这些定义为Binary elements。您可以使用它们添加到二进制表中以用于自定义操作,并使用奇怪地位于 IIS 命名空间中的 Certificate element(我从未使用过此功能)。请尝试将组件设置为永久。这应该可以防止卸载。您也可以将证书安装为File elements,但是您需要一个自定义操作才能将它们安装到商店中(我想)。
    【解决方案2】:

    将您的二进制文件放入单独的 WiX component 并使其永久化。看看这个thread 以及

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多