Formatting InstallShield 2012生成的升级以错误格式报告已安装版本

Formatting InstallShield 2012生成的升级以错误格式报告已安装版本,formatting,version,upgrade,installshield,installscript,Formatting,Version,Upgrade,Installshield,Installscript,在使用InstallShield 2012 Spring构建的安装程序进行升级期间,我看到以下消息: InstallShield向导将把的已安装版本(9.01.005)更新为9.2.0.53版 InstallShield向导正在将的(9.01.005)更新为版本9.2.0.53 这些消息基于字符串资源IDS\u IFX\u SDWELCOMMESSAGE\u UPDATE\u WELCOME和IDS\u IFX\u STATUSEX\u STATICTEXT\u UPDATEUI。我相信未更改的

在使用InstallShield 2012 Spring构建的安装程序进行升级期间,我看到以下消息:

  • InstallShield向导将把的已安装版本(9.01.005)更新为9.2.0.53版
  • InstallShield向导正在将的(9.01.005)更新为版本9.2.0.53
  • 这些消息基于字符串资源
    IDS\u IFX\u SDWELCOMMESSAGE\u UPDATE\u WELCOME
    IDS\u IFX\u STATUSEX\u STATICTEXT\u UPDATEUI
    。我相信未更改的字符串资源将如下所示:

    • InstallShield向导将%P的已安装版本(%VI)更新为版本%VS。若要继续,请单击“下一步”
    • InstallShield向导正在将%P的(%VI)更新为版本%VS
    尽管某些资源指出第二个字符串资源是“InstallShield向导已将%p的%VI更新为版本%VS。”

    问题在于,旧的(已安装的)版本号应该是一个显示字符串,如“9.1.5.2”,而不是内部版本号的格式化版本,如“9.01.005”。据我所知,
    SdSubstituteProductInfo
    使用
    IFX\u INSTALLED\u DISPLAY\u VERSION
    OnUpdateUIBefore
    的默认安装脚本代码中填充
    %VI
    替换。以及
    IFX\u INSTALLED\u DISPLAY\u VERSION
    中的
    IFX\u INSTALLED\u VERSION
    的默认值,这解释了为什么首选显示字符串没有显示在我们希望显示的位置。我假设
    SdWelcome
    (或类似引用
    IFX\u INSTALLED\u DISPLAY\u VERSION
    )的任何对话框或代码)也会显示格式不正确的版本


    尽管我在web上搜索了上述函数、字符串和字符串ID,但我还没有找到以正确格式显示正确格式的旧版本号(DisplayVersion)的理想解决方案。一些文章建议硬编码跳过旧版本号的格式字符串,而不是使用包含
    %VI
    的字符串资源。其他人建议根据需要手动格式化版本号,并将结果放入
    IFX\u INSTALLED\u DISPLAY\u version
    。我知道有更好的答案,我希望下次我或其他人查找时能更容易地找到它。

    OnBegin
    InstallScript函数中,在
    begin
    之后添加以下一行InstallScript代码作为第一行:

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

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

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

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


    美丽的!在InstallShield中,简单的事情是多么的困难,这让我一直感到惊讶。