【问题标题】:Configuring InstallShield LE to remove previous versions built using Visual Studio Setup Projects配置 InstallShield LE 以删除使用 Visual Studio 安装项目构建的先前版本
【发布时间】:2011-09-20 19:16:08
【问题描述】:

使用 Visual Studio 2010,我想切换到使用 InstallShield LE 而不是 Visual Studio 安装项目。

在安装项目中,存在一个选项 RemovePreviousVersions,它非常适合制作安装程序,该安装程序基本上会在发布新版本时进行就地升级。

现在使用 InstallShield LE,我已经更新了版本并生成了新的 ProductCode,但运行安装程序后,之前的版本仍然存在。

我需要做什么才能使 InstallShield 构建的项目可以删除使用 VS 安装项目构建的先前版本?

【问题讨论】:

    标签: visual-studio-2010 installshield-le


    【解决方案1】:

    如果我能再给出一个答案,我就可以创建一个升级路径,该路径不需要基于通用 ISPreventDowngrade 升级路径设置/更新特定升级代码、最小或最大版本。根据 Max Version 说明中的注意事项,You must specify a value for at least one of the version settings: Min Version, Max Version, or both. 所以我将 Max 版本设置为通用占位符。完成后,我不需要设置最大版本。所以我的配置如下:

    • 升级代码:{00000000-0000-0000-0000-000000000000}(通用占位符,将替换为当前安装程序的升级代码)
    • 最低版本:空白
    • 包括最低版本:否
    • 最高版本:***ALL_VERSIONS***(版本占位符)
    • 包括最高版本:是

    我保持不变的所有其他字段。有关更多信息,请参阅http://helpnet.flexerasoftware.com/installshield23helplib/helplibrary/PreventingDowngrades.htm,但请注意拼写错误。上面的两个占位符都打错了;我是从ISPreventDowngrade升级路径中使用的数据中获取的。

    【讨论】:

      【解决方案2】:

      user2321103 的回答非常好,在升级路径中创建新的升级条目是关键。不幸的是,这个选项被隐藏起来了,因为它是产生大多数人自然期望的安装程序的正常默认行为所必需的。

      这个新答案的原因是我发现我可以将升级条目中的 Max Version 设置为更高的数字而不是当前版本。这意味着我不必记住为每个新版本都更新它。我当前的版本是 2.1.8,所以我将 Max Version 设置为 2.1.9999。万一我希望在未来的某个版本中有不同的行为,我可以将我的版本升级到 2.2.x

      每当您更改版本号时,Microsoft 安装项目都会自动更新产品代码,但 Installshield LE 不会,因此需要记住每次都这样做。

      正如其他答案所述,升级条目使用以前安装版本的升级代码很重要。我没有尝试过,但大概如果由于某种原因您有多个具有不同升级代码的先前版本,那么您可以为每个版本创建一个单独的升级条目。

      我不明白您为什么不能将 Include Min Version 和 Include Max Version 都设置为 No,但这似乎不起作用。我没有尝试过这些不同参数的每种组合,但正如其他答案中所述,以下设置似乎可以解决问题:

      • 最低版本:空白
      • 包括最低版本:是
      • 最高版本:>= 当前版本
      • 包括最高版本:是

      不要将 Lang Search Criterion 更改为 Exclude 似乎也很重要。 我还将忽略删除失败设置为是。 我将 Migrate Feature States 设置为 No,但我认为这与 LE 版本无关。

      【讨论】:

      • 迭代进步——我有一个由此得出的答案,不需要设置最大版本。
      【解决方案3】:

      当我第一次在 Visual 2012 中开始一个项目时,这让我发疯了。我在添加/删除程序中不断收到重复的副本,并且旧版本没有更新。这就是我发现我需要做的事情。

      在升级路径下,创建一个新路径。将最小版本留空(除非您需要),包括最小版本是的,最大版本应设置为您现在正在安装的版本。包括最高版本到是。

      每次安装更新时,请在“一般信息”部分中升级产品版本。 单击一般信息部分中的新产品代码 不要更改升级代码

      返回升级路径,并将 Max 版本设置为您现在正在部署的相同版本。这是让它为我工作的关键。

      此过程卸载以前的版本,并安装最新版本。添加/删除程序中没有重复项。

      希望这会有所帮助。

      【讨论】:

      • 这是为我做的,谢谢!
      • 是否可以让用户选择进行升级或完全重新安装整个应用程序(从而删除所有数据库和设置文件)。我正在使用 Install Shield LE 免费版
      • 我在执行此操作时遇到了问题。我在开发机器上的任何地方都找不到我的 msi 文件
      【解决方案4】:

      你可以试试这个:

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

      您还应该确保两个版本的 ALLUSERS 属性具有相同的值(这是相同的方法)。您可以在此处阅读有关升级的更多信息:http://msdn.microsoft.com/en-us/library/aa369786(VS.85).aspx

      【讨论】:

      • 这是否与 VS 设置项目的属性中显示的 UpgradeCode 相同?
      • 不幸的是,这仍然不起作用。安装版本 A (VS Setup) 然后安装版本 B (InstallShield LE) 仍然会导致同时安装两个版本。
      • 成功!最后缺少的步骤是在 InstallShield LE 的“组织您的设置”部分的升级路径部分创建一个条目。右键单击升级路径并选择新升级路径。将出现一个要求打开文件的对话框。找到以前版本的 .MSI 文件并将其打开。它将自动导入升级代码并提供字段,您可以在其中指定应使用新安装程序替换的先前版本范围。如果没有这个升级路径,简单地使用相同的 UpgradeCode 是行不通的。
      • @JYelton 我有一个类似的问题,我不断收到“该产品的另一个版本已经安装...”,我已经在“一般信息”选项卡上增加了“产品版本”并创建了以您上面指定的方式升级路径。我还需要更改其他设置吗?
      • @Cosmin @JYelton 我一定遗漏了一些东西,因为更改产品代码让我不得不进行两次单独的安装。这也是 InstallShield Express 手册中描述的方式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多