当我从项目中删除合并模块时,WiX 主要升级不会运行

发布于 2024-09-12 10:07:33 字数 381 浏览 5 评论 0原文

我有一个 WiX 项目,其中包含 x86 的 Visual C++ 2008 运行时组件的安装以及单独的合并模块。

不幸的是,MSI v4.5 的 .msm 存在一个众所周知的问题。更具体地说,.msm 自定义操作 SxSUninstallCA 卸载需要 20 分钟才能完成。

所以,长话短说,我决定从新版本的产品中删除.msm,用.exe文件默默地安装VC++组件。

如果我仅更改此内容(当然还有 ProductCode),安装程序不会检测计算机上已安装的产品并执行正常安装,而无需先卸载旧版本。

知道这里发生了什么吗? MSI 是否应该检查 UpgradeCode 和 ProductCode 以检测某个产品是否是系统上已安装的另一个产品的升级?

I've got a WiX project that includes the installation of Visual C++ 2008 runtime components for x86 with a separated merge module.

Unfortunately there's a well known issue with that .msm with MSI v4.5. To be more specific the .msm custom action SxSUninstallCA takes 20 minutes to complete on uninstall.

So, long story short, I decided to remove the .msm from the new version of the product, installing VC++ components with the .exe file, silently.

If I change only this thing (and the ProductCode, of course) the installer doesn't detect the already installed product on the machine and performs a normal installation, without uninstalling the older version first.

Any idea on what's going on here? Should MSI check for UpgradeCode and ProductCode to detect if a product is an upgrade of another one already installed on the system?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

甜宝宝 2024-09-19 10:07:33

检查两个安装程序中的 ALLUSERS 属性是否设置相同。我在合并模块时遇到了同样的问题并且解决了它。

Check if you have the ALLUSERS property set the same in both the installers. I have had the same problem with merge modules and that solved it.

鱼窥荷 2024-09-19 10:07:33

如果您希望新的 MSI 升级旧的 MSI(并且您需要使用主要升级,因为您要删除组件),那么,是的,您需要使用 UpgradeCode 和 Upgrade 元素(或者在 WiX v3.5 中,您可以使用新的 MajorUpgrade 元素)。

如果您提供有关 .wxs 文件中内容的更多详细信息,我可以更具体。

If you want the new MSI to upgrade the old MSI (and you need to use a Major Upgrade because you are removing Components) then, yes, you need to use the UpgradeCode and Upgrade elements (or in WiX v3.5 you can use the new MajorUpgrade element).

If you provide more details about what is in your .wxs files, I can be more specific.

意犹 2024-09-19 10:07:33

该项目设置为使用 UpgradeCode 和 ProductCode 来检测已升级。
例如: 我构建了一个 .msi:

ProductCode="05406C5C-8D66-4779-AECA-A93B18729ED5"  
UpgradeCode="05B87404-548E-4BEA-9621-FBF9459F25B0"  
PackageCode="*"  
Version="1.1.1"  

该 .msi 包含要安装的文件和文件夹,以及 Microsoft_VC90_CRT_x86.msm 合并模块。

然后我使用以下参数构建另一个 .msi

ProductCode="7F626A0C-5E69-496D-999E-8E2B14C01FE6"  
UpgradeCode="05B87404-548E-4BEA-9621-FBF9459F25B0"  
PackageCode="*"   
Version="1.1.2"  

相同的文件,仍然包含合并模块:它可以工作,应用程序得到更新(卸载以前的版本,安装新版本)。
当我评论对 Microsoft_VC90_CRT_x86.msm 的每个引用时,构建的安装程序不会检测到该应用程序的先前版本。

The project is set up to use UpgradeCode and ProductCode to detect an upgrade already.
For example: I build a .msi with:

ProductCode="05406C5C-8D66-4779-AECA-A93B18729ED5"  
UpgradeCode="05B87404-548E-4BEA-9621-FBF9459F25B0"  
PackageCode="*"  
Version="1.1.1"  

This .msi contains files and folders to be installed, as well as Microsoft_VC90_CRT_x86.msm merge module.

Then I build up another .msi with the following parameters

ProductCode="7F626A0C-5E69-496D-999E-8E2B14C01FE6"  
UpgradeCode="05B87404-548E-4BEA-9621-FBF9459F25B0"  
PackageCode="*"   
Version="1.1.2"  

Same files, merge module still included: it works, the application gets updated (uninstalled the previous version, installed the new version).
The moment I comment every single reference to Microsoft_VC90_CRT_x86.msm, the built installer doesn't detect the previous version of the application.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文