双用途包和 MajorUpgrade

dual purpose package and MajorUpgrade

我正在尝试制作一个双重用途的软件包,但我在升级时遇到了问题。

默认情况下我的 属性 是 ALLUSERS=2MSIINSTALLPERUSER=1

在对话框 readyToInstall 上,如果 "install for all users" 被选中,我使用 SetProperty 放置 ALLUSERS=1MSIINSTALLPERUSER={}(只是为了确定)。

这部分工作正常,注册表在 HKLM 中设置,文件在 Program Files 中设置。

但是在升级期间... 我有一个自定义操作,在 AppSearch 之后检查键是否在 HKLM 中,它设置了 ALLUSERS=1MSIINSTALLPERUSER={}.

如果我进行较小的更新,文件会正确升级。

如果我进行重大更新,注册表仍在 HKLM 中,但文件切换为 LocalAppData(实际上它遵循默认值),忽略我强制 ALLUSERSAppSearch 之后的 1。 (我什至试图在迁移功能状态之后强制它只是为了模仿 UI 但它也没有用)。

有没有办法对双用途包进行重大升级?

根据以下摘录,您似乎面临场景 B:

Major Upgrades can Fail
If you use the Upgrade code feature of Windows Installer to perform a major upgrade the detection of the existing software will fail if: (a) the original software was installed with ALLUSERS=”” and the new software has ALLUSERS=1 in its Property table or passed on the command line or (b) the original software was installed with ALLUSERS=1 and the new software has ALLUSERS=”” or ALLUSERS is not defined in the Property table or on the command line.

更多信息: https://shieldmaster.wordpress.com/2012/05/03/understanding-per-user-or-per-machine-context-for-application-setup-packages/