美好时光,
我试图创建应该包含新添加文件的可卸载补丁(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进行此操作的正确方法是什么?
答案 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之类的消息以及不支持删除组件的条目,如果发生这种情况,则意味着补丁将无法正确应用。