在使用使用 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
填充默认 InstallScript 代码%VI
中的替换。OnUpdateUIBefore
并且IFX_INSTALLED_DISPLAY_VERSION
默认来自IFX_INSTALLED_VERSION
,这解释了为什么首选显示字符串没有出现在我们想要的位置。而且我假设SdWelcome
(或任何类似引用的对话框或代码IFX_INSTALLED_DISPLAY_VERSION
)也显示格式错误的版本。
尽管我在网上搜索了上面提到的函数、字符串和字符串 ID,但我还没有找到以正确格式显示正确格式的旧版本号 (DisplayVersion) 的理想解决方案。一些文章建议对跳过旧版本号的格式字符串进行硬编码,而不是使用包含%VI
. 其他人建议根据需要手动格式化版本号并将结果放入IFX_INSTALLED_DISPLAY_VERSION
. 我知道有一个更好的答案,并且我希望下次我或其他人寻找它时更容易找到它。