这可能吗?
所有我能看到的搜索基本上是我需要使用第三方工具(例如Orca)从我现有的MSI获取GUID并使用这些来配置InstallShield以卸载现有版本。我已经尝试过这些指令中的一两个,但到目前为止还没有任何工作。可能是因为我做错了什么,但似乎我正在经历许多箍,做一些我认为应该相对直截了当的事情。这个问题以前没有解决过吗?
谷歌的最高结果指向this answer:
这是否意味着每次我想部署新版本时,我必须使用Orca打开我的'旧MSI并获取其UpgradeCode'?
这听起来有点hackish,当然我每次部署新版本时都不想做。有没有办法实现自动化?这个功能是否在更高版本的InstallShield中可用(请记住我在LE上 - 我会在必要时升级)
答案 0 :(得分:62)
InstallShield LE与之前的安装项目一样,允许安装新版本的产品,替换以前安装的版本。至于技术上是否是旧产品的卸载,或者就地升级似乎不太重要。
关键在于产品代码与升级代码之间的区别:
产品代码:由于此代码可以唯一标识您的产品,因此建议您在分发版本后更改产品代码。
升级代码:存储在UpgradeCode属性中的升级代码对于产品的所有版本应保持相同。
(此文本直接来自InstallShield LE帮助库。)
如何使用这些代码来部署同一产品的产品和版本更新并不是一件简单的事。
帮助文字听起来好像永远不应该更改产品代码。不是这种情况。可能应该更清楚地写出“由于此代码唯一标识您的产品版本,因此不建议在分发特定版本后更改产品代码。” ......或类似的东西。
在创建要发布的新版本时,基本上 应该 更改产品代码。 单独保留升级代码!要更改产品代码,请单击代码右侧的{..}
按钮。 InstallShield LE将生成一个新代码。
我的标准程序是更改项目的版本,生成新的产品代码,并构建InstallShield安装项目。
在已安装早期版本的计算机上安装产品时,安装项目将对其进行更新,并且只保留目标计算机上安装的程序的一个版本(最新版本)。
答案 1 :(得分:3)
据我所知,YJelton的答案是正确的,但是如果你想确保删除旧产品,你应该将一个MajorUpgrade项添加到Upgrade表中 - 如果你保持升级代码相同(如建议的那样) )您可以选择“共享我的升级代码的产品”选项,对于产品版本,您可以选择“任何早期版本”。
这样,如果升级代码与旧产品相同,并且您的新产品具有更高版本号,则旧产品将被删除。
如果要更改升级代码,可以添加一个MajorUpgrade项目,该项目选择了“具有其他升级代码的产品”选项。然后粘贴旧的升级代码。
答案 2 :(得分:-1)
转到"升级路径"并将最小版本设置为空白,最大版本。当前。将max / min包含在yes中,并将所有代码ID设置为一个guid。