如何在 WiX 安装中正确添加新文件以创建可卸载补丁?

How to correctly add new files in WiX installation to create an uninstallable patch?

好时光,

我正在尝试创建可卸载补丁(msp 文件),其中应包含新添加的文件。该文件按以下方式添加:

<Directory Id="Some Dir">
  <Directory Id="MYDIR" Name="Some Name">
    <Component Id="Some Component" Guid="{GUID}" KeyPath="yes">
          <File Id="README.txt" Name="README.txt" Source="to_install\README.txt" KeyPath="no"/>
          <File Id="default.cfg" Name="default.cfg" Source="to_install\default.cfg" KeyPath="no"/>
          ... // some more files
    </Component>
  ...
...

我也尝试过使用 DirectoryRef,但得到了相同的结果。

"MYDIR" 目录也在其他地方使用,并且那里已经安装了几个其他文件,但是补丁正在添加新文件,安装日志显示 CreateDirectory table 已被修改并且补丁的卸载被禁用。

使用 WiX 的正确方法是什么?

补丁是否可卸载与这样的 WiX 源没有真正的关系。可卸载补丁绝对需要的一件事是 PatchMetadata table,它表示补丁是可卸载的,如下所示:

http://wixtoolset.org/documentation/manual/v3/patching/patch_building.html

或者在这里,查看 PatchMetadata table 如果您使用 PCP 文件,AllowRemoval:

https://msdn.microsoft.com/en-us/library/aa370344(v=vs.85).aspx

因此,在补丁创建过程中,您需要做一些与您的 WiX 源无关的事情来使补丁可卸载。从您的问题中不清楚您是如何正确创建补丁的。

即使补丁生成工作正常,也必须遵守一些规则,如下所述:

https://msdn.microsoft.com/en-us/library/aa367850(v=vs.85).aspx

它说(例如)您不能更改任何现有已安装项目的组件 ID。在安装补丁时创建一个详细的日志,并查找诸如 SELMGR 之类的消息和表明不支持删除组件的条目,如果发生这种情况,则意味着补丁将无法正确应用。

键路径: 此值指向属于安装程序用来检测组件的组件的文件或文件夹。 它正在 MSI 的 CreateFolder 中创建条目,因为 KeyPath 是在组件级别提供的,它将安装文件夹作为其密钥,因此您的补丁变得不可卸载。

在对该组件最重要的组件文件之一提供 KeyPath。因此它不会进入 MSI 的 CreatFolder table 并且您的补丁变得可卸载。