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

时间:2015-04-20 15:53:48

标签: wix windows-installer patch uninstall

美好时光,

我试图创建应该包含新添加文件的可卸载补丁(msp文件)。该文件添加在以下maner中:

<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,但得到的结果相同。

&#34; MYDIR&#34;目录也在其他地方使用,其中还安装了其他几个文件,但补丁正在添加新文件,安装日志显示CreateDirectory表已被修改,补丁的卸载将被禁用。

使用WiX进行此操作的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

补丁是否可以卸载并不是真正与那样的WiX源相关。对于可卸载的补丁,您肯定需要的一件事是PatchMetadata表,该表说该补丁是可卸载的,如下所示:

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

或者在这里,如果您使用PCP文件,请参阅PatchMetadata表,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之类的消息以及不支持删除组件的条目,如果发生这种情况,则意味着补丁将无法正确应用。