我正在尝试使用 wix 创建一个补丁(.msp 文件),其中我将一些文件复制到应用程序的安装路径(程序文件)并尝试添加注册表项。
在安装(使用 msi)时,它按预期工作正常,二进制文件被更新。但是当我尝试应用补丁时它不起作用,这意味着二进制文件没有得到更新。
但是,我观察到,当我再次尝试应用补丁时,二进制文件似乎已更新。
似乎在这里我通过提供 Guuid 添加组件。
问题是:为什么它适用于全新安装而不是使用补丁时?是否可以使用补丁(msp)添加具有新 guuid 的组件?
需要一些更精确的信息:
“在安装(使用 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/