双用途包和MajorUpgrade

时间:2016-11-03 20:11:34

标签: windows-installer installshield msiexec basic-msi

我试图制作双用途套餐,但升级时遇到问题。

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

如果"安装所有用户"对话框readyToInstall上的

选中,我使用SetProperty放置ALLUSERS=1MSIINSTALLPERUSER={}(只是为了确定)。

该部分工作正常,注册表在HKLM和Program Files中设置。

但是在upgdrade期间...... 我有一个自定义操作,在AppSearch之后检查,如果密钥位于HKLM中,则设置为ALLUSERS=1MSIINSTALLPERUSER={}

如果我进行了一次小更新,文件会正确升级。

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

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

1 个答案:

答案 0 :(得分:0)

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

  

重大升级可能失败
  如果使用Windows Installer的升级代码功能执行   主要升级现有软件的检测将失败如果:(a)   原始软件安装了ALLUSERS=””和新版本   软件在其Property表中有ALLUSERS=1或在命令上传递   或(b)原始软件已安装ALLUSERS=1和   新软件中未定义ALLUSERS=””ALLUSERS   属性表或在命令行上。

有关详细信息: https://shieldmaster.wordpress.com/2012/05/03/understanding-per-user-or-per-machine-context-for-application-setup-packages/