* updated by Kii Ali, 12-11-2001 寄件者: Jonson 收件者: patch-author 主旨: BinPatch 3.0g 簡易說明(二版) 日期: 1999年4月3日 AM 06:16 大家好,我是 Jonson 由於上次公佈的說明,有部份遺漏,故此次補上完整的說明 這一次 BinPatch 說明新增加以下部份指令: ============================================================================= History Patch (又名為 Multiversion Patch) 多重 Patch 說明,以及 -l -m -q -s -v -z 等指令介紹。 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- BinPatch 3.0g 簡易說明 Written by Johnson Wu E-mail:fwbook@ms25.hinet.net Date: 1999/4/2 作者網站: http://www.kayhayen.com ============================================================================= BinPatch 是一套由德國人 Kay Hayen 所研發的一套檔案 patch 程式,目的是讓使用者 根據兩個新舊版本檔案之間的差異來產生一個小體積的檔案 (簡稱為 patch 檔), 而其 他人只需要利用這個小檔案即可將舊版的檔案轉換為新的版本! 聽起來蠻不錯的,但是也許有人會說:這有何稀奇! 隨便上網抓就有一卡車的軟體能夠 做 patch 檔… 的確,幾個比較有名的軟體例如:RTPatch, WinPatch, MDIFF...等都有相當數量的支持 者,不過既然是介紹 BinPatch,那得替 BinPatch 提出有力的證明才行啊。 因此我作了一份表格讓您比較一下: ┌─────┬───────┬───────┬─────┬──────┐ │ │ BinPatch │ RTPatch │ WinPatch │ MDIFF │ ├─────┼───────┼───────┼─────┼──────┤ │使用簡易性│ 容易 │ 麻煩 │ 適中 │ 容易 │ ├─────┼───────┼───────┼─────┼──────┤ │適用的作業│DOS,Win31/95/ │DOS,Win31/95/ │ Win95/98 │DOS,Win95/98│ │平台 │98/NT,OS/2, │98/NT,OS/2, │ │ │ │ │Linux │Linux 及其它..│ │ │ ├─────┼───────┼───────┼─────┼──────┤ │自動搜尋檔│ 可以 │ 可以 │ 不能 │ 不能 │ │案 │ │ │ │ │ ├─────┼───────┼───────┼─────┼──────┤ │自動搜尋登│ │ │ │ │ │錄檔 │ 可以 │ 可以 │ 不能 │ 不能 │ ├─────┼───────┼───────┼─────┼──────┤ │命令列或是│ │ │ │ │ │GUI 介面 │ 均有 │ 均有 │ 僅有 GUI │ 只有命令列 │ ├─────┼───────┼───────┼─────┼──────┤ │產生的檔案│ │ │ │ │ │大小 │ 小 │ 很大 │ 很大 │ 中等 │ ├─────┼───────┼───────┼─────┼──────┤ │具備有多重│ │ │ │ │ │patch 功能│ 能 │ 能 │ 不能 │ 不能 │ └─────┴───────┴───────┴─────┴──────┘ 參考上面的表格之後,您是否對 BinPatch 燃起了一點信心呢? 底下我們示範一組基本的用法: GenPatch c:\old c:\new patch ---+---- --+--- --+--- --+-- | | | | | | | 要產生的 patch 檔名 | | 新的檔案 | 原始檔案 BinPatch 主程式 以上命令將會比較 c:\old 以及 c:\new 兩個目錄下所有的檔案 (包括子目錄),並且按 照比較的結果產生一個名稱為 patch.utp 的檔案,請注意:副檔名 .utp 是程式自動加 上去的,所以不需要自行添加。 讀到這裡,您可能會感到奇怪為何產生的檔案並非是執行檔(.exe)呢? 因為上面的例子 只是簡單的用法, .utp 格式的 patch 檔因為不能做自動修改檔案的動作,所以必須要 套用 BinPatch 的另一個附加程式 DoPatch.exe,其使用的方法如下: DoPatch test.utp 請注意:使用 DoPatch 時,使用者必須要指定一個完整的檔名,因此 .utp 也要自行加 入才可以。 那怎麼做才能產生我們要的自動修改檔 (SelF-Applying, 以下簡稱為 SFA) 呢? 介紹您認識第一個參數之前有件非常非常重要的事要告訴您, 在 BinPatch 中所有的參 數都有大小寫的區別,例如: -a 和 -A 是不同的參數,請務必記得喲! Ok, "-s" 是您一定要記得的參數,它的功能就是產生 SFA 檔。 底下是範例: GenPatch c:\old c:\new patch -s 由上面的例子我們可以得到 patch.exe 檔。 不過,還有一個問題,原始的檔案被 patch.exe 修改完之後,這些舊檔案會躲到那裡去 呢? 若改檔順利的話,原始檔案一定會存放在該軟體所在的位置中名稱為 "backup" 的 目錄下。例如,在 c:\test 修改檔案,則原始檔案最後將存放在 c:\test\backup 下。 "backup" 這個目錄是 patch 檔案之後 SFA 自己產生的,您可別笨笨的先去給他造一個 喔! :-) 另一個有用的功能稱為 "History Patch" 又稱為 "多重 Patch"。何謂 "多重 Patch"? 我們時常看過許多的軟體在推出新的版本時, 該公司會在網站上提供升級檔讓使用者下 載,例如:升級檔的使用說明會陳述到… "本程式僅供 1.1, 1.2 及 1.5 版的使用者升 級到 2.0 版…",很顯然,這個 patch 檔並不只針對單一的版本升級,而是3個版本的 用戶都適用。 BinPatch 也提供這種強大的功能! 怎麼做呢? 方法很簡單,我們以上面提到的情況來 示範 "多重 Patch" 的用法: GenPatch c:\v11 c:\v12 c:\v15 c:\v20 upgrade -s ------ ------ ------ ------ 1 2 3 4 第 1、2、3 組目錄存放各個不同版本的檔案, 最後一組(4)放新版的檔案,這樣所 產生的 patch 檔 (upgrade.exe) 就能讓擁有三種不同版本的使用者升級到 2.0 版了! 看到這裡的讀者先恭喜您,已經畢業啦! 基本上,只有 -s 這個參數也已經很夠用了, 因此我將這整個說明劃分為兩部份, 從以下開始後半段是其它參數使用介紹,若是有空 您也可以參考一下。 ─────────────────────────────────────── BinPatch 3.0g 參數使用說明 (Used for GenPatch) ========================== 參數名稱 原英文名稱 用途說明 -------- ---------------- --------------------------------------------------- @file file 是所有的參數集,以換行為參數分隔符,字元 # 為 首的為註解行。檔案中可再呼叫其它參數檔。 -------- ---------------- --------------------------------------------------- -a All 讓 BinPatch 處理所有的檔案。 加上 -a 可以一併處理隱 -all 藏檔。 -------- ---------------- --------------------------------------------------- -b Backup 指定原始檔案所要存放的目錄。 若不加上此參數則預設的 目錄為 "Backup"。 範例: -b="Backup Directory" -b=OldFiles -nobackup -backup=none -backup=no -------- ---------------- --------------------------------------------------- -c Comment 將 patch 檔加上檔頭註解文字。 在 patch 檔執行時會先 -comment 秀出來讓使用者觀看。 範例: -c="註解的上限為 10 x 76 個字元\n可以換行。" -c=@comment.txt 註 1: "\n" 是特殊控制符號,可讓註解自動換行。 註 2: "@comment.txt" 指定 comment.txt 檔的內容做為 註解。 -------- ---------------- --------------------------------------------------- -cache cache Preserve patch information for later reuse. May speed up your testing of BinPatch options to just enter and be done once you have created the patch information for files. When you change a single file not all other information needs to be renewed. While BinPatch is so really fast that you may not need it in most cases, this option is a big helper if you got some hard nuts for BinPatch in your software. -------- ---------------- --------------------------------------------------- -d Delete 在 patch 檔案時,刪除指定的檔案。 範例: -d="a secret file.doc" -d=security.sys -d=file*.hlp -------- ---------------- --------------------------------------------------- -e exact This option makes sense in directory mode only. It -exact will force that only filenames with exactly the same filename are considered when it comes to selecting how to produce a file in the end state. You disable autodetection for the file using this option. If no file with the same name is present, the effect is the same as -nopatch since when no creation path is found, GenPatch must include the file without producing it by patching. 範例: -exact="filename with spaces" -exact=pattern -e=pattern -e -------- ---------------- --------------------------------------------------- -f force 強迫 patch,儘管檔案完全相同。 -force 範例: -f -f=* -force -force="filename with spaces" -force=pattern 註 1: 前三個範例是相同的。 註 2: 後二個僅限使用於 directory mode。 -------- ---------------- --------------------------------------------------- -h help 顯示 GenPatch 的簡易語法資訊。 -help -------- ---------------- --------------------------------------------------- -i Ignore 指定不處理的檔案,此指令具最高優先處理權。 -ignore 範例: -i="filename with spaces" -i=file.b?k -------- ---------------- --------------------------------------------------- -j no-compression BinPatch 內建有壓縮系統, 所以製造出來的 patch 檔實 際上都已經壓縮過了, 如果您為了某些理由不願意壓縮, 則可以使用 -j 取消壓縮的功能。 註: 請參閱 -z 參數。 -------- ---------------- --------------------------------------------------- -k Key 這是 BinPatch 非常重要的功能, 此功能又稱為:登錄檔 -key 搜尋(registry searching)。 當我們將製作好的 patch 檔丟給其他人用時,必須要考慮 到使用者在使用上的便利性, 如果能讓使用者不必煩惱要 在那一個目錄下使用, 只要一執行 patch 檔就能為我們完 成所有的事情, 那不是很方便嗎? 通常軟體安裝之後, 都會在登錄檔裡頭留下檔案存放的路 徑。 在此我們假設以登錄編輯器找到一個 key 為: "HKEY_CURRENT_USER\Software\My Program" 假設其 key 的名稱 (key name) 為: "InstDir" 假設其 key 的值 (key value) 為: "C:\Program Files\My Application" 則使用以下命令可讓 patch 檔執行時擷取該 key 的值: -k="HKEY_CURRENT_USER\Software\My Program\InstDir" 則結果會讓 BinPatch 自動切換到: "C:\Program Files\My Program" 目錄下修改檔案。 又假設在 HKEY_CURRENT_USER\Software\My Program" 這個 key 之中含有一個預設值 (default)。則可用下列命 令讓 BinPatch 自動擷取此值: -k="HKEY_CURRENT_USER\Software\My Program\" 眼尖的人會發現多了一個 "\" 符號, 而加上 "\" 意思就 是讀取預設值(default)。 範例: -key="\HKEY_LOCAL_MACHINE\Software\YourApp\YourValue" -key=HKEY_LOCAL_MACHINE/Software/YourApp/YourValue -k=HKLM\Software\YourApp\ThisKeysDefaultValueToTake\ -K=@RegManip.reg,HKLM/Software/YX/Install,yourmain.exe,r (not implemented yet) Specify a registry manipulation to be done after successfully applying the patch file. The file given is expected to be in REGEDIT4 file format as output by the registry editor on Win32 platforms. A single exception: You specify a single replacement character that is being replaced with the contents of the specified registry key contents at runtime. Ie. all occurances of %r in the values will be replaced with what is found on the client machine at the time the patch is applied. You are free to choose any numeric or alpha character and the replace marking is case sensitive. The manipulation requires full access to manipulated keys and read access to the lookup key. To maximize use of this, you can specify a base value which is known to be always present and that e.g. parts a path part that you want to replace elsewhere from the not needed filename. -------- ---------------- --------------------------------------------------- -l Log file 將 BinPatch 產生 patch 檔的過程存到記錄檔(log)中。 假設 patch 檔的名稱為 test.exe 則 log 檔將命名為: test.log。 範例: -l=txt -l=htm -l 註 1: "txt" 是指建立純文字型態的 log 檔。 註 2: "htm" 表示所建立的 log 檔為 html 格式。 註 3: 不指定 log 型態則預設為 txt 檔。 -------- ---------------- --------------------------------------------------- -m Memory 限制 BinPatch 建立 patch 時所需要使用的記憶體。 範例: -m=6 -m=99 註 1: -m=n,n 的值範圍可由 5-100,值越大則 BinPatch 使用的記憶體越少, 但相對的也會減慢建立 patch 檔的速度。 註 2: 預設值為 5。 -------- ---------------- --------------------------------------------------- -nopatch nopatch 指定不使用 patching 的檔案,若舊版與新版檔案不同, 則會整個檔案含括在 patch 內,如此可確保檔案 patch 成功。 範例: -nopatch="filename with spaces" -nopatch=file.e?e -------- ---------------- --------------------------------------------------- -q Quiet 建立 patch 檔的過程中僅量不顯示相關的訊息在螢幕上。 -quiet -------- ---------------- --------------------------------------------------- -qp quiet-progress 不使用處理進度計量,在 patch 大量小檔案時使用此指令 -quiet-progress 可加快處理速度。 -------- ---------------- --------------------------------------------------- -s Self-applying 建立 SFA patch 檔(副檔名為 .exe)。 範例: -s=gui32 -s=gui16 -s=gui -s=dos -s=os2 -s=linux -s 註 1: gui32 表示建立 Windows 95/98/NT 具有視窗操作 介面的 SFA。 註 2: gui16 為建立 Windows 3.1 視窗介面的 SFA。 註 3: 只有 -s 表示建立 Windows 95/98 DOS 型 態的 SFA。 註 4: dos 表示建立純 DOS SFA。 ※ 目前並不建議您使用 gui32 或 gui16 模式, 因其視 窗中所顯示的字型還不能調整或設定 (醜醜的),作者 已經承諾將改進這個缺點。 -------- ---------------- --------------------------------------------------- -t Time 在建立 patch 檔的過程中, BinPatch 會將所有被處理的 新檔案的日期記錄在稍後製造的 patch 檔中,而之後當使 用者執行 patch 時, BinPatch 則使用這些記錄一併把被 修改的檔案日期變更到與當初製造者的檔案日期一致。 -t 參數是用來改變 BinPatch 對檔案日期處理的方式。 範例: -t=n (n = now) -t=l (l = latest) -t=a (a = apply) 註 1: "n" 表示直接以目前的日期/時間作為修改後的新檔 案日期。 註 2: "l" 以最接近現在日期的檔案為準, 其它檔案的日 期全部與該檔案一致。 -------- ---------------- --------------------------------------------------- -u Unimportant File 顧名思意,就是指定哪些檔案是不重要的。 也就是說修改 -unimportant 檔案時, 若該檔案不存在、版本不符合或者只是一個小小 的文字檔時會導致 BinPatch 跳過這些檔案不予處理。 註:在正常情況下 BinPatch 遇到條件不符的檔案時會停止 修改的動作, 並且中斷程式的執行,所以使用 -u=*.* 或 -u 可以避免這種情形發生。 範例: -u="unimportant files.doc" -u=program.exe -u=*.txt -u=* 與 -u 意思相同 -------- ---------------- --------------------------------------------------- -v Version 顯示 BinPatch 的版本相關資訊。 -------- ---------------- --------------------------------------------------- -z zip 將所建立的 patch 檔以指定的壓縮程式予以壓縮。 -z 參數目前支援下列的壓縮程式: InfoZip、LHA、RAR、GZip、PKZip、ARJ 和 JAR。 不過使用時請另加上 -j 參數來取消 BinPatch 內建的壓縮 功能, 否則造成重覆壓縮反而會使得 patch 檔更大,還有 不管是指定那一種壓縮程式,使用前必須先確定您的電腦中 有這個壓縮程式的存在,而且要放在系統能抓得到的路徑下 才有作用。 範例: -z=RAR -z=ARJ ───────────────────────────────────────