2013-01-23 51 views
3

我使用與2012內置的InstallShield的安裝春天在升級過程中看到以下消息安裝的版本:通過的InstallShield升級內置2012和報告格式錯誤

  1. 安裝嚮導將更新安裝的版本(9.01.005 )的<我們的產品>到版本9.2.0.53。
  2. InstallShield嚮導正在更新(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使用IFX_INSTALLED_DISPLAY_VERSION來填充替代OnUpdateUIBefore的默認InstallScript代碼。 IFX_INSTALLED_DISPLAY_VERSION默認爲IFX_INSTALLED_VERSION,這就解釋了爲什麼首選顯示字符串沒有出現在我們希望的位置。並且我假設SdWelcome(或者類似地引用IFX_INSTALLED_DISPLAY_VERSION的任何對話或代碼)也顯示格式不正確的版本。

儘管我在網上搜索了上面提到的函數,字符串和字符串ID,但我還是沒有找到理想的解決方案來以正確的格式顯示格式正確的舊版本號(DisplayVersion)。一些文章建議硬編碼跳過舊版本號的格式字符串,而不是使用包含%VI的字符串資源。其他人建議根據需要手動格式化版本號,並將結果放入IFX_INSTALLED_DISPLAY_VERSION。我知道有一個更好的答案,我希望下次我或其他人找到它時更容易找到答案。

回答

3

OnBegin的InstallScript功能,增加的InstallScript代碼作爲第一行下面一行begin後:

RegDBGetItem(REGDB_UNINSTALL_DISPLAY_VERSION, IFX_INSTALLED_DISPLAY_VERSION); 

在OnBegin執行此還確保在問題沒有提到另一個消息使用正確的格式:

安裝程序檢測到%P版本%VI已經安裝。

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

在安裝此版本之前,您將不得不卸載以前的版本。

+0

美麗!它永遠不會讓我驚歎於InstallShield中簡單的事情有多難以置信的困難。 –