[VS2005]使用不同語系在起始安裝出現亂碼

這個狀況是有針對性的,所以請注意圖片,此問題也會發生在 VS2008 ,只是用 VS2005 為範本來說。
 
主要的問題是你用的編譯器語系與你開發的語系不同,例如用繁中版開發英文版軟體,大部分的狀況都能正確顯示英文,但卻會發生當你安裝你的軟體在沒有指定必要系統元件時,在散布免責聲明 (EULA) 時發生亂碼,例如沒有 .Net framework 2.0 時,如下圖。 
 
 這個問題是由 setup.exe 產生的,直接執行 setup.msi 則不會有此問題,如下圖。
 
探究此問題的成因是,setup.exe 是由下面數個部分組成:
1. 基底二進位檔,$(BootStrapper)\Engine\setup.bin
2. 語系資源,$(BootStrapper)\Engine\$(lang)\setup.xml
3. 產品資訊,$(BootStrapper)\Packages\$(Product)\product.xml
4. 封裝資訊,$(BootStrapper)\Packages\$(Product)\$(lang)\package.xml
5. 散佈授權免責聲明,$(BootStrapper)\Packages\$(Product)\$(lang)\eula.txt
 
其中 $(BootStrapper):
VS2005: C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper
VS2008: C:\Program Files\Microsoft SDKs\Windowsv6.0A\Bootstrapper
 
因此要解決亂碼的問題很單純,把:
$(BootStrapper)\Packages\DotNetFX\zh-CHT\eula.txt
換成英文版的 eula.txt 即可。
 
英文版的 eula.txt 哪裡來?將:
$(BootStrapper)\Packages\DotNetFX\dotnetfx.exe
用 WinRAR 解壓縮後,可得到各語系版本的 eula.langid.txt ,比較中文版 eula.1028.txt 與 eula.txt 的差異,只有差在少第三、四行,且 eula.txt 使用 UTF-8 格式,eula.1028.txt 使用 Unicode 格式:
MICROSOFT WINDOWS INSTALLER 2.0
MICROSOFT WINDOWS INSTALLER 3.1
跟最後少個句號,所以我們把英文版的 eula.1033.txt 插入三、四行,另存成 UTF-8 格式,並取代:
$(BootStrapper)\Packages\DotNetFX\zh-CHT\eula.txt
 
重新編譯後可得下圖:
 
即可解決亂碼問題。如果是其他語系或必要系統元件,也可依此方式修改。我找過微軟沒提供不同語系版本的 eula.txt 可下載,如果你真的要完全一字不錯,你可能要安裝不同版本的 Visual Studio 來取得,我自己選擇從 .Net framework 2.0 Runtime 裡面的 eula 來改。
 
另外考慮到經常性的需求,我是建議保存原始的 eula.txt ,更名為 eula.1028.txt ,等到需要哪個語系的 eula.txt 時,直接複製一個來取代 eula.txt 即可,如下圖。
 
標準的封裝部署專案,只能用此方法來處理,ClickOnce 專案可自訂 xml 的設定,指定 eula.txt ,會比這個方法簡單,不需要動到軟體原始目錄,可依需求選用。
 
參考資訊:
 
下載參考:
我自製的 eula.1033.txt (壓縮成 ZIP)
Categories: 封裝部署, 技術分享 | 發表留言

文章導覽

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

在 WordPress.com 建立免費網站或網誌.

%d 位部落客按了讚: