Installshield - 需要删除带有“错误”升级代码的产品

时间:2011-02-07 20:19:57

标签: windows-installer installshield

我们有一个installshield产品,我们在项目的生命周期内拥有相同的升级代码。不知何故,一个版本发布了新的升级代码,所以现在我们开始在客户的添加/删除程序中看到多个条目。

是否有办法(安装脚本,可能?)通过检查产品以获取另一个升级代码,如果它与当前升级代码不匹配则将其删除(我们将重置为旧版本)永远不要再改变它!)?

提前感谢您的时间!

3 个答案:

答案 0 :(得分:5)

安装程序可以删除属于任意数量的UpgradeCode系列的产品。只需编写另一个MajorUpgrade规则(升级表)来覆盖旧版和新版UpgradeCode,你应该没问题。

答案 1 :(得分:1)

检查应用程序安装信息在系统注册表中的存储位置。如果您可以找到存储产品代码的位置,则可以编写脚本以从注册表中读取代码,然后执行删除程序脚本。

答案 2 :(得分:1)

我自己刚刚经历过,这很痛苦。我们使用VS 2005构建我们的MSI,无论出于何种原因,我在上一版本中意外更改了升级代码。这导致程序在“添加/删除程序”对话框中显示两次,尽管设置了RemovePreviousVersions标志。我发现我必须编辑升级表以输入rouge更新代码的条目。

使用InstallShield这个过程对您来说应该更容易,但我会包含我必须使用的VS指令以防万一。

在VS 2005中,您无权编辑升级表(至少我找不到它),所以我不得不安装一个名为Microsoft Orca的程序(MS有一些很酷的代码名称,但产品很糟糕)名)。它附带Windows SDK,所以我已经在我的计算机上使用它了。这是链接:http://msdn.microsoft.com/en-us/library/aa370557%28v=vs.85%29.aspx

在该程序中打开您的MSI文件,您将看到升级到列表底部。您必须为要处理的升级代码添加新条目。这是一个解释它的链接: http://msdn.microsoft.com/en-us/library/aa372379%28VS.85%29.aspx

我创建了一个新行,我想删除升级代码,使用正确的版本号,属性为4(msidbUpgradeAttributesIgnoreRemoveFailure)和ActionProperty为PREVIOUSVERSIONSINSTALLED。

如果我理解正确,我基本上告诉MSI,与RemovePreviousVersions标志一起,它将考虑这个其他升级代码并将其删除。它适用于我的情况,所以希望其中一些对你有帮助。

祝你好运!