Blu*_*kMN 5 formatting installshield upgrade version installscript
在使用InstallShield 2012 Spring内置的安装程序进行升级时,我看到以下消息:
这些消息基于字符串资源IDS_IFX_SDWELCOMMESSAGE_UPDATE_WELCOME和IDS_IFX_STATUSEX_STATICTEXT_UPDATEUI。我相信未更改的字符串资源将如下所示:
尽管某些资源指示第二个字符串资源是“ 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。我知道有一个更好的答案,我希望下次我或其他任何人寻找它时,可以更轻松地找到它。
在OnBeginInstallScript 函数上,添加以下 InstallScript 代码行作为之后的第一行begin:
RegDBGetItem(REGDB_UNINSTALL_DISPLAY_VERSION, IFX_INSTALLED_DISPLAY_VERSION);
Run Code Online (Sandbox Code Playgroud)
在 OnBegin 中执行此操作还可以确保问题中未提及的另一条消息使用正确的格式:
安装程序检测到已安装 %P 的 %VI 版本。
此安装程序安装早期版本的 %P (%VS)。
在安装此版本之前,您必须卸载以前的版本。