『補丁簡介』
漢化補丁,與軟件安裝包一樣,都是漢化軟件發布的形式,兩者可以實現軟件漢化的目的,但相較于安裝包而言,漢化補丁則不涉及原程序的版權問題,且體積較小,便于傳輸。
在 INNO setup 中,制作真正補丁可以調用 NSIS 中的補丁插件-VPatch 插件,詳見陳維信的 Blog 《INNO 補丁制作技術, 打開 INNO 補丁制作方法的第一頁》,鏈接地址為:http://restools.hanzify.org/article.asp?id=45
這里介紹一種與前文不同的 INNO setup 補丁制作方法。該方法所編譯生成的補丁,不含真正意義上的補丁數據(即:漢化文件與未漢化文件比較生成的差異文件),僅僅是執行了文件替換或文件復制操作,故而不算嚴格意義上的補丁。但該方法簡單易行,非常適用于非大型軟件(包括多語言文件補丁),其主要思路如下:
1)通過注冊表鍵值判斷是否已經安裝原版程序;
2)通過讀取注冊表鍵值判斷原版的安裝路徑;
3)將已漢化文件替換同名的未漢化文件或復制文件到指定目錄。
『學習任務』
漢化目標:用 INNO setup 制作 Cleanse Uninstaller Pro 6 的漢化補丁(示例文件為簡體中文語言文件)
原版 Cleanse Uninstaller Pro 6
『操作步驟』
1.通過注冊表鍵值判斷是否已經安裝原版程序。
一般軟件安裝后,都會在注冊表中添加相關鍵值,如本實例軟件,安裝原版后會添加如下鍵值:
HKEY_LOCAL_MACHINE/SOFTWARE/Cleanse
只需在[Code]段添加如下代碼即可判斷是否已安裝原版程序,代碼如下:
存在相關鍵值,可以繼續安裝補?。?br />
不存在相關鍵值,提示用戶安裝原版:
2.搜索注冊表獲取安裝路徑
在“開始”菜單-“運行”中輸入“regedit”,打開注冊表編輯器,搜索“C:/Program Files/Zards software/Cleanse Uninstaller Pro”,由于注冊表中搜索不到安裝路徑(如下圖所示),只能搜索主程序以獲取完整路徑。
獲取 Cleanse Uninstaller.exe 文件所在位置的上級目錄,即安裝路徑可以用下面兩種不同代碼實現。
第一種方式: INNO setup 的 [setup] 段代碼設置為:
程序代碼
DefaultDirName={code:ExtractFilePath|{reg:HKLM/SOFTWARE/Cleanse,Path}}
第二種方式:
(1)INNO setup 的 [setup] 段代碼設置為:
程序代碼
DefaultDirName={code:GetPath}
(2)INNO setup 的 [Code] 段添加如下代碼設置:
程序代碼
function GetPath(Param: String): String;
var
strPath: String;
begin
strPath := ExpandConstant('{pf}Zards software/Cleanse Uninstaller Pro');
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE/Cleanse', 'Path', strPath) t/then
begin
strPath := ExtractFilePath(strPath);
end;
Result := strPath;
end;
當注冊表能直接找到安裝路徑時,可以用{pf}代替實際的安裝路徑,如:
對應注冊表值如下
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE/SOFTWARE/Reallusion/FaceFilter Studio/2.0]
.......
"Install Path"="C://Program Files//Reallusion//FaceFilter Studio 2"
.......
此時,可以在 INNO setup 的 [setup] 段代碼設置為
程序代碼
DefaultDirName={reg:HKLM/SOFTWARE/Reallusion/FaceFilter Studio/2.0,Install Path|{pf}}
3.將已漢化的 SChinese.lan 復制到軟件安裝路徑的“LangFiles”子目錄中,[File]段代碼如下:
程序代碼
Source: "E:/Hanzify/SChinese.lan"; DestDir: "{app}/LangFiles"; Flags: ignoreversion
作者:Raindy 網站:www.raindy.org
新聞熱點
疑難解答