加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

安装程序 – 如何在将InstallScope更改为“perMachine”之后修复

发布时间:2020-12-14 04:32:06 所属栏目:Windows 来源:网络整理
导读:我们使用wix为我们的应用程序创建设置.对于用户已经安装了较旧版本的应用程序的情况,我们使用 MajorUpgrade XML element进行了大幅度的升级.这一切都可以按需要进行:如果安装了较旧的版本,它将被透明地升级.如果存在较新版本,安装程序会中断一个明确的消息.
我们使用wix为我们的应用程序创建设置.对于用户已经安装了较旧版本的应用程序的情况,我们使用 MajorUpgrade XML element进行了大幅度的升级.这一切都可以按需要进行:如果安装了较旧的版本,它将被透明地升级.如果存在较新版本,安装程序会中断一个明确的消息.

不过,我现在想将InstallScope从“perUser”更改为“perMachine”.不幸的是,这破坏了升级逻辑.新的安装程序似乎没有检测和删除以前的“perUser”安装.相反,它只是安装在同一个ProgramFiles位置的旧版本之上.用户在“添加/删除程序”列表中看到两个条目,并在桌面上看到两个相同的快捷方式(旧的用户特定的一个和新的perMachine).

如何将安装程序从“perUser”转换到“perMachine”安装范围,而不会破坏升级逻辑?

从每台机器配置开始.
<Property Id="ALLUSERS" Value="1" />

这将运行一个自动的每机器检查(如果您有MajorUpgrade元素工作,我推测),这不会取代以前的每个用户的安装:

Action start 15:46:35: FindRelatedProducts.
MSI (c) (D0:0C) [15:46:35:496]: FindRelatedProducts: current install is per-machine.  Related install for product '{0C6604FB-58EC-48B9-8259-5871EFDADEB9}' is per-user.  Skipping...
MSI (c) (D0:0C) [15:46:35:496]: FindRelatedProducts: current install is per-machine.  Related install for product '{0C6604FB-58EC-48B9-8259-5871EFDADEB9}' is per-user.  Skipping...

因此,在安装之前,请确保为用户范围中已安装的产品(例如此类)运行另一个FindRelatedProducts调用:

<!-- temporarily switch to per-user install scope-->   
<Publish Dialog="MyWelcomeDlg" Control="Next" Property="ALLUSERS" Value="{}">1</Publish>
<!-- find related products that have been installed per-user -->
<Publish Dialog="MyWelcomeDlg" Control="Next" Event="DoAction" Value="FindRelatedProducts">1</Publish>
<!-- switch back to per-machine install scope-->
<Publish Dialog="MyWelcomeDlg" Control="Next" Property="ALLUSERS" Value="1">1</Publish>

这反过来又找到了每用户的安装:

Action start 15:46:36: FindRelatedProducts.
FindRelatedProducts: Found application: {0C6604FB-58EC-48B9-8259-5871EFDADEB9}
MSI (c) (D0:88) [15:46:36:716]: PROPERTY CHANGE: Adding WIX_UPGRADE_DETECTED property. Its value is '{0C6604FB-58EC-48B9-8259-5871EFDADEB9}'.
MSI (c) (D0:88) [15:46:36:716]: PROPERTY CHANGE: Adding MIGRATE property. Its value is '{0C6604FB-58EC-48B9-8259-5871EFDADEB9}'.

无论发现哪些检查,现有产品都将被删除.

Action start 15:46:41: RemoveExistingProducts.
RemoveExistingProducts: Application: {0C6604FB-58EC-48B9-8259-5871EFDADEB9}

在旁注:这不能规避当您有双用途安装程序时出现的基本困难:计算机上的User1可能会安装在每个用户范围内,然后随后每个机器安装User2. User1将在他的程序/功能表中看到这两个安装,我不知道哪个优先.所以请考虑使用每机器安装.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读