由InstallShield 2012构建的升级报告格式错误的安装版本

Blu*_*kMN 5 formatting installshield upgrade version installscript

在使用InstallShield 2012 Spring内置的安装程序进行升级时,我看到以下消息:

  1. InstallShield向导会将<我们的产品>的已安装版本(9.01.005)更新为版本9.2.0.53。
  2. InstallShield向导正在将(<our product>)(9.01.005)更新到版本9.2.0.53。

这些消息基于字符串资源IDS_IFX_SDWELCOMMESSAGE_UPDATE_WELCOMEIDS_IFX_STATUSEX_STATICTEXT_UPDATEUI。我相信未更改的字符串资源将如下所示:

  • InstallShield向导会将已安装的%P版本(%VI)更新为版本%VS。要继续,请单击下一步。
  • InstallShield向导将%P(%VI)更新为版本%VS。

尽管某些资源指示第二个字符串资源是“ InstallShield向导已将%P的%VI更新为版本%VS”。

问题是旧的(已安装的)版本号应该是显示字符串,例如“ 9.1.5.2”,而不是内部版本号的格式化版本,例如“ 9.01.005”。据我了解,它SdSubstituteProductInfo用于在的默认InstallScript代码中IFX_INSTALLED_DISPLAY_VERSION填充%VI替换项OnUpdateUIBefore。以及IFX_INSTALLED_DISPLAY_VERSION来自的默认设置IFX_INSTALLED_VERSION,这说明了为什么首选的显示字符串没有出现在我们希望的位置。而且我假设SdWelcome(或任何对话框或类似引用的代码IFX_INSTALLED_DISPLAY_VERSION)也显示格式错误的版本。

尽管我在网上搜索了有关上述功能,字符串和字符串ID的所有内容,但我还没有找到以正确格式显示正确格式的旧版本号(DisplayVersion)的理想解决方案。一些文章建议对跳过旧版本号的格式字符串进行硬编码,而不要使用包含的字符串资源%VI。其他人建议根据需要手动格式化版本号,然后将结果放入IFX_INSTALLED_DISPLAY_VERSION。我知道有一个更好的答案,我希望下次我或其他任何人寻找它时,可以更轻松地找到它。

Blu*_*kMN 4

OnBeginInstallScript 函数上,添加以下 InstallScript 代码行作为之后的第一行begin

RegDBGetItem(REGDB_UNINSTALL_DISPLAY_VERSION, IFX_INSTALLED_DISPLAY_VERSION);
Run Code Online (Sandbox Code Playgroud)

在 OnBegin 中执行此操作还可以确保问题中未提及的另一条消息使用正确的格式:

安装程序检测到已安装 %P 的 %VI 版本。

此安装程序安装早期版本的 %P (%VS)。

在安装此版本之前,您必须卸载以前的版本。