我的要求如下:
如果申请版本为例如12.0安装在C:\Folder1
,版本13.0的安装程序将安装在文件夹C:\Folder1
中,然后版本13.0的安装应该静默卸载12.0版本并安装最新版本13.0
如果申请版本为例如12.0安装在C:\Folder1
,版本13.0的安装程序将安装在文件夹C:\Folder200
中,然后版本13.0的安装应安装最新版本并保留版本12.0
我尝试过的事情:
如果我使用升级代码方法卸载以前的版本,那么即使先前版本安装在系统的任何位置,也会发生以前版本的卸载。
使用自定义操作 - 创建vbscript以使用WindowsInstaller.Products数据读取已安装的产品,并使用产品代码创建命令以使用&#34; msiexec.exe / x ProductCode&#34; <卸载应用程序/ p>
我们尚未在注册表中添加任何数据,因此无法使用注册表方法卸载以前的版本。
这是任何软件的基本要求,但我无法弄清楚如何实现这一目标。如果有人有指示,请告诉我。
我有2015年的Installshield限量版和Visual Studio 2015专业版。
答案 0 :(得分:0)
这实际上不是任何软件的基本要求。&#34;基础是如果安装了ProductCode / UpgradeCode升级它。
对于第2点,您将获得弹出窗口,因为您正在尝试同时运行2个MSI ExecuteSequences。如果您想继续沿着这条道路前进,您必须将卸载操作移至UISequence。请注意,静默安装不会运行此操作,因为它永远不会遇到UISequence。此外,更好的方法是建立自己的引导程序(setup.exe)来控制卸载/安装的流程。
答案 1 :(得分:0)
您无法做到这一点,因为升级(主要升级)MSI并不关心安装以前版本产品的位置。带有UpgradeCode的新MSI(以及一些其他详细信息)将升级匹配的现有产品,卸载旧版产品,无论其安装在何处。
一些问题(不完整清单):
如果您要安装其他产品而不升级现有产品,则需要一个MSI(例如)具有不同的UpgradeCode或不执行RemoveExistingProducts。
您的MSI(旧的和新的)需要设置ARPINSTALLLOCATION,因此您可以询问它们的安装位置。这使您可以比较安装位置(但IMO不是理想的解决方案)。
存在以下问题:两个单独安装的产品现在是否在开始菜单中具有相同的快捷方式,是否在共同位置中存在任何共享文件,是否存在任何不可共享的项目(服务名称,全局)事件名称等)。
还存在可维护性问题,例如如何升级或修补两个几乎完全相同的已安装产品。
无论如何,我只是问用户他们是想要升级还是并排安装,而不是根据选择的文件夹做出决定(这似乎是IMO选择安装位置的一个不寻常的副作用) 。
一般选择可能基于具有RemoveExistingProducts操作的条件,基于命令行属性或其他机制。或者,根据可维护性要求,您可以更改升级代码(在命令行上进行转换),以便不会发生升级。我不清楚在新安装的浏览文件夹对话框中检测前一个MSI的安装位置很简单。
答案 2 :(得分:0)
我担心MSI对这种情况不太适合 - 正如你所发现的那样。
实例转换 :我想您可以调查instance transforms概念。它旨在允许多个安装,但我不喜欢这个概念,并且从未主动使用它。因此,我无法向您介绍限制和陷阱的内幕 - 对不起 - 也许其他人可以阐明?
正如PhilDW所述,您可以为最新的MSI使用另一个升级代码,然后与旧安装并行安装。除了已经提到的内容之外,您还需要更改新包的所有组件GUID。 WiX允许基于目标路径自动生成组件GUID,但对于Installshield则不然。应该可以使用The instance transform并排安装而不更改所有组件GUID - 我相信。
App-V :如果您在公司环境中,如果我有足够的经验,我还建议您查看App-V打包(虚拟化) )。这允许隔离应用程序,因此多个版本可以并行运行。但同样,我不是给你内幕故事的合适人选。我知道有许多限制,但不能用现实世界的经验来阐述。
Setup.exe启动器 :如果您的应用程序正常处理多个实例而没有碰撞快捷方式和服务名称等...(如Phil描述的那样),那么您可以安装所有新版本并排,并且永远不会通过升级表卸载旧版本。然后,您可以在setup.exe
启动器(如果有)中手动处理以前版本的卸载。我想您可以使用实例转换概念来安装新版本,或者您可以使用所有新组件GUID以及产品,包和升级GUID为每个新版本重新创建设置。
旧版Installscript项目 :我想您可以放弃MSI并使用旧版Installscript项目来部署您的应用程序。我不建议这样做,因为这些项目对于可靠的远程管理和静默运行(安装和卸载都有问题)都存在问题。
保管的一些链接: