Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在WiX安装中正确添加新文件以创建可卸载的修补程序?_Wix_Windows Installer_Patch_Uninstallation - Fatal编程技术网

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

如何在WiX安装中正确添加新文件以创建可卸载的修补程序?,wix,windows-installer,patch,uninstallation,Wix,Windows Installer,Patch,Uninstallation,好时机 我正在尝试创建可卸载的补丁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.tx

好时机

我正在尝试创建可卸载的补丁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表已被修改,并且修补程序的卸载已被禁用


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

补丁是否可卸载与WiX源代码的这一部分并不相关。对于可卸载的修补程序,您肯定需要一个PatchMetadata表,该表表明修补程序是可卸载的,如下所示:

或者,如果使用PCP文件,请参见PatchMetadata表,AllowRemoval:

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

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


例如,其中说明您不能更改任何现有已安装项目的组件ID。在安装修补程序时创建详细日志,并查找SELMGR之类的消息和表示不支持组件removl的条目,如果发生这种情况,则表示修补程序将无法正确应用

补丁是否可卸载实际上与WiX源代码的这一部分无关。对于可卸载的修补程序,您肯定需要一个PatchMetadata表,该表表明修补程序是可卸载的,如下所示:

或者,如果使用PCP文件,请参见PatchMetadata表,AllowRemoval:

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

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

例如,其中说明您不能更改任何现有已安装项目的组件ID。在安装修补程序时创建详细日志,并查找SELMGR之类的消息和表示不支持组件removl的条目,如果发生这种情况,则表示修补程序将无法正确应用

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

在对该组件最重要的组件文件之一提供密钥路径。因此,它不会使条目进入MSI的CreatFolder表,您的修补程序也不会被卸载。

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


在对该组件最重要的组件文件之一提供密钥路径。因此,它不会使条目进入MSI的CreatFolder表,并且您的修补程序变得可卸载。

我没有发布任何关于我的修补程序元数据的信息,因为它似乎是正确的,因为我更新了多个文件,如果我删除我发布的有问题的代码,它可以正常工作-修补程序更新我的文件并可卸载,但只有当我使用我发布的关于安装日志中CreateDirectory表的行添加新文件时——我收到了卸载禁用警告——这也是有问题的描述。我已经阅读了您提供的链接,据说我可以添加新文件,但我没有找到任何信息如何使用WiX添加它们,并且仍然有不可安装的补丁。我还阅读了WiX关于WiX补丁的官方文档,文件元素没有指定为使补丁不可安装的元素,但是-或者我使用不正确,或者这是一个WiX问题?这就是我想理解的。把那份冗长的日志装箱。没有人能从WiX源代码中判断您是否违反了组件规则,从而导致修补程序进入广告模式而失败。查找我提到的条目。我没有发布任何关于我的修补程序元数据的信息,因为它似乎是正确的,因为我更新了几个文件,如果我删除我发布的有问题的代码,它可以正常工作-修补程序更新我的文件并可卸载,但只有当我使用我发布的关于安装日志中CreateDirectory表的行添加新文件时——我收到了卸载禁用警告——这也是有问题的描述。我一直在
ady阅读了您提供的链接,据说我可以添加新文件,但我没有找到任何信息如何使用WiX添加这些文件,并且仍然有不可安装的补丁。我还阅读了WiX关于WiX补丁的官方文档,文件元素没有指定为使补丁不可安装的元素,但是-或者我使用不正确,或者这是一个WiX问题?这就是我想理解的。把那份冗长的日志装箱。没有人能从WiX源代码中判断您是否违反了组件规则,从而导致修补程序进入广告模式而失败。查找我提到的条目。太好了。这真的很有用。但是,这对SqlScript不起作用。当我在新的msi中添加一个带有SqlScript元素的新组件,然后构建补丁并应用它时,卸载选项将消失。有人能帮忙吗?太好了。这真的很有用。但是,这对SqlScript不起作用。当我在新的msi中添加一个带有SqlScript元素的新组件,然后构建补丁并应用它时,卸载选项将消失。有人能帮忙吗?