我正在尝试使用wix创建一个补丁(.msp文件),我将一些文件复制到应用程序的安装路径(程序文件),并尝试添加注册表项。
在安装时(使用msi),它可以正常工作,更新二进制文件。
但是当我尝试应用补丁时,它不起作用,意味着二进制文件没有得到更新。
然而,我观察到当我再次尝试应用补丁时,二进制文件似乎会更新 好像在这里我通过提供Guuid来添加组件。
问题是:为什么它适用于全新安装但不适用于使用补丁? 是否可以使用patch(msp)添加具有新guuid的组件?
答案 0 :(得分:1)
需要更准确的信息:
"安装时(使用msi),按预期工作正常,二进制文件更新"。
这是全新安装还是某种升级?如果是全新安装,并且您的安装替换了较旧的二进制文件,因为它们的版本较低,那么这是预期的。您只是安装在现有文件上,但如果它们之前是由MSI(您的或任何人)安装的,那么您可能无法正确更新它们。
可以添加带补丁的组件,但规则可能很复杂。补丁的目的主要是修复现有组件,而不是添加它们。此外,如果您删除组件作为修补程序的一部分,则修补程序将无法正常工作。您需要注意的主要问题是组件规则,而不是在修补程序或升级中破坏它们。
http://robmensching.com/blog/posts/2003/10/18/component-rules-101/
要添加组件或进行任何类型的更改(除了修复现有文件),在您的情况下最安全的做法是进行重大升级。
要了解在更新过程中是否已破坏组件规则(如修补程序),请使用详细日志并查找与删除不受支持的组件相关的SELMGR消息。同时设置MSIENFORCEUPGRADECOMPONENTRULES = 1,以便在规则被破坏时更新失败。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa370093(v=vs.85).aspx
http://robmensching.com/blog/posts/2007/1/4/doing-a-small-update-or-minor-upgrade-in-msi-use/