【发布时间】:2013-01-23 16:58:22
【问题描述】:
我在使用使用 InstallShield 2012 Spring 构建的安装程序进行升级期间看到以下消息:
- InstallShield 向导会将 的已安装版本 (9.01.005) 更新到版本 9.2.0.53。
- InstallShield 向导正在将 的 (9.01.005) 更新到版本 9.2.0.53。
这些消息基于字符串资源IDS_IFX_SDWELCOMMESSAGE_UPDATE_WELCOME 和IDS_IFX_STATUSEX_STATICTEXT_UPDATEUI。我相信未更改的字符串资源看起来像这样:
- InstallShield 向导会将已安装的 %P 版本 (%VI) 更新到版本 %VS。要继续,请点击下一步。
- InstallShield 向导正在将 %P 更新 (%VI) 到版本 %VS。
虽然有些资源表明第二个字符串资源是“InstallShield Wizard is updated %VI of %P to version %VS.”
问题在于旧(已安装)版本号应该是像“9.1.5.2”这样的显示字符串,而不是像“9.01.005”这样的内部版本号的格式化版本。据我了解SdSubstituteProductInfo 使用IFX_INSTALLED_DISPLAY_VERSION 在OnUpdateUIBefore 的默认InstallScript 代码中填充%VI 替换。而IFX_INSTALLED_DISPLAY_VERSION 默认来自IFX_INSTALLED_VERSION,这就解释了为什么首选显示字符串没有出现在我们想要的位置。我假设SdWelcome(或任何类似引用IFX_INSTALLED_DISPLAY_VERSION 的对话框或代码)也会显示格式错误的版本。
尽管我在网上搜索了上面提到的函数、字符串和字符串 ID,但我还没有找到以正确格式显示格式正确的旧版本号 (DisplayVersion) 的理想解决方案。一些文章建议硬编码跳过旧版本号的格式字符串,而不是使用包含%VI 的字符串资源。其他人建议根据需要手动格式化版本号并将结果放入IFX_INSTALLED_DISPLAY_VERSION。我知道有更好的答案,我希望下次我或其他人查找时更容易找到它。
【问题讨论】:
标签: formatting version upgrade installshield installscript