如何让 InstallShield LE 自动卸载现有安装?

Posted

技术标签:

【中文标题】如何让 InstallShield LE 自动卸载现有安装?【英文标题】:How to get InstallShield LE to uninstall the existing installation automatically? 【发布时间】:2012-07-17 10:31:00 【问题描述】:

这可能吗?

我所看到的基本上是我需要使用 3rd 方工具(例如 Orca)从我现有的 MSI 中获取 GUID,并使用这些配置 InstallShield 以卸载现有版本。我已经尝试过其中一两套指令,但到目前为止没有任何效果。可能是因为我做错了什么,但似乎我跳过了很多圈来做一些我认为应该相对直截了当的事情。这个问题不是已经解决了吗?

google 中最高的结果指向this answer:

使用 Orca 打开您的旧 MSI 并从属性表中获取其 UpgradeCode 在您的 InstallShield LE 项目中,转到解决方案资源管理器中的“常规信息” 确保“升级代码”字段设置为您的旧 MSI 升级代码

这是否意味着我每次想要部署新版本时都必须打开“使用 Orca 的旧 MSI 并获取其升级代码”?

这听起来有点老套,而且我肯定不想在每次部署新版本时都这样做。有没有办法自动化这个?此功能是否在更高级的 InstallShield 版本中可用(请记住我在 LE - 如果需要,我会升级)

【问题讨论】:

您是否需要 InstallShield LE 来卸载以前的版本,或者只是执行就地升级? 您好 JYelton,理想情况下 InstallShield 会进行升级。但是,我从安装程序 (setup.exe) 得到的消息是需要先卸载以前的版本。 这个问题的公认答案对我有用:[如何让 InstallShield 卸载以前的版本?][1] [1]:***.com/a/12177644/35133 【参考方案1】:

InstallShield LE 与之前的安装项目一样,允许安装新版本的产品,该版本将替换之前安装的版本。至于技术上是卸载旧产品,还是就地升级,似乎无关紧要。

关键在于Product CodeUpgrade Code的区别:

产品代码:由于此代码唯一标识您的产品,因此不建议您在发布版本后更改产品代码。

升级代码:存储在 UpgradeCode 属性中的升级代码对于产品的所有版本应保持相同。

(此文本直接来自 InstallShield LE 帮助库。)

如何使用这些代码来部署产品和同一产品的版本更新并不完全简单。

帮助文本听起来像是您永远不应该更改产品代码。不是这种情况。可能应该写得更清楚地说“由于此代码唯一标识您的产品版本,因此不建议在您已经分发特定版本之后更改产品代码。” ...或类似的东西。

基本上您应该在创建要发布的新版本时更改产品代码。 不要管升级代码! 要更改产品代码,请单击代码右侧的.. 按钮。 InstallShield LE 将生成一个新代码。

我的标准程序是更改我的项目的版本、生成新的产品代码并构建 InstallShield 设置项目。

在已安装较早版本的机器上安装产品时,安装项目将对其进行更新,并在目标机器上仅保留一个版本(最新)的程序。

【讨论】:

谢谢你。不幸的是,我现在不在工作,所以我无法真正检查它是否有效。我们在这里(爱尔兰)有一个银行假日周末,所以我要等到星期二才能看到这个。 您好 JYelton,我尝试了您的建议,并且似乎有效 - 按照您的说明,我可以安装新版本,而无需手动卸载旧版本。但是,旧版本仍然存在于“添加或删除程序”列表中(在 XP 上,在 Windows 7 中未尝试过)。你知道是否有办法删除旧版本吗? 很抱歉在一个老问题上发帖,但我遇到了与@DaveDev 相同的问题。我的 UpgradeCode 完全一样,但是当我更改 ProductCode 和 ProductVersion 时,我仍然在 Add/Remove 程序中有多个版本。 我也经历过有两个版本,但后来我做了一个升级路径并修复了它(我想这是为了让安装程序知道它应该尝试升级/更新) 我也尝试了上述步骤,但我在添加/删除程序条目中有两个版本的相同应用程序【参考方案2】:

据我了解,YJelton 的回答是正确的,但是如果您想确保删除旧产品,您应该在升级表中添加一个 MajorUpgrade 项目——如果您保持升级代码相同(如建议的那样) ) 您可以选择“共享我的升级代码的产品”选项,对于产品版本,您可以选择“任何早期版本”。

这样,如果升级代码与您的旧产品相同,并且您的新产品具有更高的版本号,则旧产品将被删除。

如果您想更改升级代码,您可以添加一个 MajorUpgrade 项目,该项目选择了“具有另一个升级代码的产品”选项。然后粘贴您的旧升级代码。

【讨论】:

您在哪里看到“主要升级”、“共享我的升级代码的产品”或“任何早期版本”选项?我只能添加“新升级路径”并输入具体版本号。【参考方案3】:

转到“升级路径”并将最小版本设置为空白,最大版本。到电流。将 max/min 包括为 yes 并将所有代码 id 设置为一个 guid。

【讨论】:

以上是关于如何让 InstallShield LE 自动卸载现有安装?的主要内容,如果未能解决你的问题,请参考以下文章

installshield 升级包如何删除低版本已安装的文件?

InstallShield6.0 如何卸载已经制作完成的安装程序?

Installshield静默卸载在命令行中不起作用

InstallShield 执行卸载自定义动作

在installshield中,如何在安装里,加个卸载快捷方式在开始程序里,急~~~

使用 Installshield 和用户对话框卸载 MSI 时的特权提升