Wix MSI卸载时的MsiPatchRemovalList

Wix MSI卸载时的MsiPatchRemovalList,wix,windows-installer,msi-patch,Wix,Windows Installer,Msi Patch,我在我的MSI项目中有一个自定义操作,条件是MsiPatchRemovalList,这是因为我需要为每个补丁卸载过程执行此操作 这工作正常,当我执行卸载补丁时,它正在执行CustomAction,并且该过程引用特定补丁时没有错误 问题是,当我卸载MSI时,所有修补程序都会卸载,但事件不会触发 注意:MSI卸载中的执行不是一个选项,因为此事件需要为每个修补程序执行特定的进程 更新: 自定义操作过程是使用MSIPATCHREMOVE元素了解修补程序Guid,并使用此Guid创建一个注册表项,在注册表

我在我的MSI项目中有一个自定义操作,条件是MsiPatchRemovalList,这是因为我需要为每个补丁卸载过程执行此操作

这工作正常,当我执行卸载补丁时,它正在执行CustomAction,并且该过程引用特定补丁时没有错误

问题是,当我卸载MSI时,所有修补程序都会卸载,但事件不会触发

注意:MSI卸载中的执行不是一个选项,因为此事件需要为每个修补程序执行特定的进程

更新:
自定义操作过程是使用MSIPATCHREMOVE元素了解修补程序Guid,并使用此Guid创建一个注册表项,在注册表中具有历史记录,以了解卸载的修补程序。

您应该能够具备以下条件(MsiPatchRemovalList或REMOVE=“ALL”)

如果您需要知道在卸载产品时应用了哪些修补程序,那么您需要在我假定的安装之前加入对MsiEnumPatches(或等效程序)的调用,并在卸载命令行上传递这些修补程序:


另一件事是,您可以为每个修补程序添加一个包含(比如)其修补程序guid的注册表项,有效地创建您自己的列表。然后,您可以对每个可能的修补程序或列表进行注册表搜索,并设置一个类似于标准修补程序删除列表的属性。我还没有完全考虑过这一点,但是如果每个补丁都在注册表中添加一些东西,说“我在这里”,你就不必太依赖补丁删除列表,因为你已经创建了自己的补丁删除列表

您应该能够有一个条件(MsiPatchRemovalList或REMOVE=“ALL”)

如果您需要知道在卸载产品时应用了哪些修补程序,那么您需要在我假定的安装之前加入对MsiEnumPatches(或等效程序)的调用,并在卸载命令行上传递这些修补程序:


另一件事是,您可以为每个修补程序添加一个包含(比如)其修补程序guid的注册表项,有效地创建您自己的列表。然后,您可以对每个可能的修补程序或列表进行注册表搜索,并设置一个类似于标准修补程序删除列表的属性。我还没有完全考虑过这一点,但是如果每个补丁都在注册表中添加一些东西,说“我在这里”,你就不必太依赖补丁删除列表,因为你已经创建了自己的补丁删除列表

但是在REMOVE=“ALL”中,我无法识别每个修补程序的修补代码,在这种情况下,MsiPatchRemovalList没有初始化。问题意味着您希望在移除产品时调用自定义操作,条件为REMOVE=“ALL”,因此,如果您将此添加到条件中,将调用自定义操作。由于您知道所有修补程序都将被卸载,因此可以调用所需的所有修补程序进程。删除该产品时没有“补丁卸载”,因为该产品是(MSI+补丁),而这正是卸载的内容。也许您的某些情况没有完全描述,例如每个修补程序和您引用的进程之间的关系。也许我可以创建一个条件来创建一个密钥,说明所有修补程序都已卸载,但如果一个用户这样做,我就不知道是否安装了修补程序。请参阅问题中的“我的更新”,但在REMOVE=“ALL”中,我无法识别每个修补程序的修补代码,并且在这种情况下,MsiPatchRemovalList未初始化。该问题意味着您希望在删除产品时调用自定义操作,条件为REMOVE=“ALL”,因此,如果将其添加到条件中,将调用自定义操作。由于您知道所有修补程序都将被卸载,因此可以调用所需的所有修补程序进程。删除该产品时没有“补丁卸载”,因为该产品是(MSI+补丁),而这正是卸载的内容。也许您的某些情况没有完全描述,例如每个修补程序和您引用的进程之间的关系。也许我可以创建一个条件来创建一个密钥,说明所有修补程序都已卸载,但如果一个用户这样做,我就不知道是否安装了修补程序。查看问题中的我的更新您能解释一下自定义操作的作用吗?这样我们就可以查看是否有其他解决方案?也许您只是添加了一些许可证密钥或以某种方式调整了一些设置?我将此过程添加到问题中,您能否解释一下自定义操作的作用,以便我们可以查看是否有其他解决方案?也许您只是添加了一些许可证密钥或以某种方式调整了一些设置?我将此过程添加到问题中