話說,工作上有一個 VB6 專案,客戶需要能從介面上切換語系,預設為英文,但要能切換繁中。
以前在學校為了寫英文研討會,就有把 VB6 程式國際化的經驗,透過語系翻譯檔外掛,存成:
$(AppPath)\Lang\{LangID}.ini
這次想說就用相同的方式,只是專案內跟語言相關的檔案比較多,所以存成:
$(AppPath)\Lang\{LangID}\filename.ext
工作完成後,拿起 VB6 封裝部署精靈一跑,糗了,VB6 的封裝部署精靈不允許相同檔名的檔案重複出現…
想了一下,免費的方案就是用 VS2010 內建的安裝專案。
首先先讓 VB6 封裝部署精靈產生安裝程式,自己要額外加的檔案可以不用選,要讓 VB6 封裝程式告訴你那些元件要散布,記得保留 Support 目錄:
接著開啟 Setup.lst 來辨識所需的系統檔案。
其中
$(AppPath) : 應用程式目錄
$(WinSysPath)、$(WinSysPathSysFile) : 為系統目錄,x86 下就是 C:\Windows\system32 。
$(DLLSelfRegister) : 是需要註冊的 ocx / dll 檔案
然後在 Visual Studio 2010 專業版以上,新增專案:
其他專案類型 > 安裝和部署 > Visual Studio Installer > 安裝專案
這邊開起來是空白專案,從檔案系統加入 Support 目錄下的所有檔案:
將在應用程式下需要的檔案拖入應用程式資料夾,包含子目錄,VS2010 會自動依結構建立,再到使用者程式功能表建立開始工具列的群組與捷徑指向應用程式。
系統資料夾預設沒有,點選目標電腦上的檔案系統,滑鼠右鍵新增,再將系統檔案拖入此目錄,一般來說 .ocx 會自動標記需要註冊,所有原先 VB6 做出來的 setup.lst 內需要註冊的檔案都要人工過濾一遍,在 VS2010 內需要註冊的檔案屬性 Register 均為 vsdrfCOMSelfReg ,如上圖。
最後測試封裝好的程式,一般來說推薦準備一個空白的虛擬機來測試。
因為客戶預計安裝在英文 Windows 下,所以準備英文環境及封裝成英文版的。測試結果有些舊版使用 big5 的部分會出問題,我自己新增的都改為 UTF-8 格式,但是考慮到舊版相容的部分不能變更 (我有做自動偵測,所以其實新版的是可以轉為 UTF-8 加密檔),所以把控制台地區語言選項非 Unicode 程式改為 Taiwan 就正常了。
考慮到 UAC ,我的預設安裝路徑就設定到 D 碟:
當然,用 VS2010 並非是 VS2008/2005 不能用,而是前幾篇可以看到,我把最完整的封裝都整理到 VS2010 ,所以就選擇用 VS2010 來封裝了。