我创建了一个安装包(通过 WIX),它利用实例转换允许在一台机器上多次安装。没有考虑太多,我还添加了对主要升级的支持(就像我以前做过很多次一样)。

今天第一次安装了新版本的产品,行为和我预期的不太一样:即使安装是针对新实例的,但似乎所有其他实例(都是旧版本)被卸载。

事后看来,这并不特别令人惊讶,因为所有实例共享相同的升级代码。根据 FindRelatedProducts 操作的文档,该版本和版本是确定应将哪些产品作为删除目标的唯一标准。

我如何编写此安装包,以便在安装新版本时仅升级目标实例,而其他实例则保持不变?

我怀疑答案可能是我应该完全删除“主要升级”功能,但我已经看到了几个使用它的多实例安装示例,所以我不确定。此外,我发现我可能没有正确处理产品代码,因为它应该使用版本号进行更新,但实例转换使用固定的产品代码。不知何故,我不认为这是这里的问题,但我想我应该提到它以防万一。

最佳答案

我曾经使用 InstallScript 编写了一个 bootstrap 来支持类似的故事。这是在 InstallShield 包含此功能之前,基于我与他们共享的工作。

基本上我的代码做了很多工作来反射(reflect)实例从 MSI 的存储转换出来,然后查询 MSI API 以了解哪些实例已经安装,以及当前的 MSI 是否代表维护 UI(相同的 ProductCode 和相同的 PackageCode)或主要升级升级(不​​同的 ProductCode)或次要升级(相同的 ProductCode 不同的 PackageCode)。

您可以在以下位置阅读更详细的信息:

Multiple Instance MSI's and InstallShield 12

下面是对它在 IS2009+ 中如何工作的解释,其中包含 bootstrap UI 的屏幕截图。

InstallShield 2009 Beta Part I ( Multiple Instances )

关于wix - Windows Installer 实例转换如何与升级交互?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5222634/

10-14 16:35
查看更多