沒有固定方法,基本是猜測加試驗(yàn),不同類別綠色軟件分別有不同制作策略。
拿到一個新的軟件,想要制成綠色軟件的話,我一般遵循如下步驟: 一、 判斷 猜測該軟能不能制成綠軟,從功能,從對它的了解,如果覺得和系統(tǒng)關(guān)系非常緊密,就不要繼續(xù)了,還是用原始安裝程序最保險最方便,這樣例子有directx9 ,IE6,Norton反病毒等。這樣判斷可節(jié)省時間,當(dāng)然可忽略這一步,嘗試制作。 二、 綠化 對于不同軟件有不同方法,沒有一定規(guī)則,但是總的來說,就是理解軟件安裝過程,轉(zhuǎn)換為綠色安裝,在這個過程中,可能需要嘗試多個方法,也可能最后由于軟件復(fù)雜性或某些特性,無法綠化。要有失敗思想準(zhǔn)備,具體綠化方法隨后講述 三、 測試 "綠化"后的測試最好到全新安裝操作系統(tǒng)中測試,且如果要在多個操作系統(tǒng)中使用該軟,還要在其他操作系統(tǒng)中測試,有的軟件的文件隨操作系統(tǒng)不同而不同,這個時候需要在不同操作系統(tǒng)中進(jìn)行"綠化"過程,最后綜合為一個完整適應(yīng)多個操作平臺綠軟。 "綠化"方法,需要根據(jù)經(jīng)驗(yàn)選擇不同"綠化"方法,也可能需要不斷嘗試不同方法,直到成功為止。 按照先易后難的次序,具體的方法包括: 1 解壓縮。指嘗試用Winzip和Winrar能不能直接打開壓縮的安裝文件,如不能打開,就換方法。如可以,那么該軟多半屬綠色安裝軟件(有個別例外,如EmEditor),把壓縮包中的文件直接解壓到目標(biāo)路徑,然后測試軟件功能是否正常,如正常,那么"綠化"就成功了,如使用不正常,就換方法。這一類軟件特點(diǎn)是安裝程序的工作完全可以由軟件自身來完成。 2安裝然后卸載。指直接安裝該軟,然后把程序復(fù)制出來,最后卸載安裝程序。如該軟件安裝程序的作用僅僅是復(fù)制文件和生成快捷鍵等,那就屬綠色安裝,可使用這個方法。最后測試軟件功能是否正常,如正常,"綠化"就成功了,如使用不正常,換方法。 3 反編譯安裝程序。動腦筋,就是根據(jù)安裝程序所用的制作工具,選擇相應(yīng)反編譯程序,然后閱讀反編譯出的安裝腳本,來綠化。軟件大多使用專門安裝工具制作,如InstallShield,Wise,Inno Setup,Windows Installer,NSIS(Nullsoft),Installer VISE,其中WindowsInstaller格式的安裝文件(就是MSI,MST為后綴的文件)可通過微軟免費(fèi)工具Orca打開看,InstallShield格式的安裝文件也有很多免費(fèi)工具可解壓縮和查看腳本。當(dāng)然專門安裝工具很多,有許多安裝程序沒有相應(yīng)反編譯程序,這時,就無法使用該法。 4 觀察反安裝程序和log文件。現(xiàn)在的軟件安裝完成后絕大多數(shù)都帶有卸載方法。卸載是安裝的逆過程,如果知道怎么卸載,那么也可以推測出如何安裝。由專門的安裝工具制作的反安裝程序,一般都是根據(jù)某一個文件中的信息來卸載的,可以用一個純文本的編輯器打開這個文件。個別情況下這個文件完全不包含可讀信息,就只好換法。具體過程就是先采用方法2,然后理解反安裝過程,最后根據(jù)反安裝的信息制作綠色軟件。 5 比較系統(tǒng)快照。當(dāng)前面的方法都失敗的時候,可以試一試這個方法。具體思路就是首先在安裝軟件之前,把系統(tǒng)的狀態(tài)記錄下來,主要包括注冊表和系統(tǒng)目錄的所有的文件狀態(tài)。然后就是安裝軟件。安裝完成后,再一次記錄系統(tǒng)狀態(tài)。最后就是比較前后兩個系統(tǒng)狀態(tài)的不同,而得知安裝程序所做的工作。這個工作一般由專門的軟件完成,如免費(fèi)工具Regshot(帖子最后有下載),免費(fèi)工具inctrl5(帖子最后有下載),微軟公司的sysdiff工具(帖子最后有下載),或者WinInstall LE(在Windows 2000 Sever 光盤的目錄VALUEADD\3RDPARTY\MGMT\WINSTLE\中)。在多數(shù)時候,僅僅需要對比安裝前后注冊表的不同,這時候還有大量的注冊表工具可以選用。在得出系統(tǒng)差異后,把差異分解為兩個部分:文件部分和注冊表部分。文件部分指的是向系統(tǒng)目錄拷貝的文件,以及作為COM組件注冊的文件,還有與這些文件相關(guān)的注冊表部分。注冊表部分單單指其余的注冊表的變化。對于文件部分,可以進(jìn)一步區(qū)分出必須要往系統(tǒng)目錄拷貝的文件(這種情況是少數(shù))和可以放在軟件的安裝目錄的文件。對于注冊表部分,區(qū)分出由這個軟件的安裝程序本身所作出的注冊表操作和注冊COM組件時候的注冊表操作,拋棄其他程序(如資源管理器Explorer)的操作。根據(jù)所有這些,寫一個拷貝文件,注冊COM組件和導(dǎo)入注冊表的批處理文件,就可以完成綠色軟件的制作了。當(dāng)注冊表文件中含有路徑信息的時候,可以手工修改注冊表文件或者把注冊表文件轉(zhuǎn)化為INF文件從而實(shí)現(xiàn)全自動的路徑處理。 6 直接導(dǎo)出注冊表,尋找自注冊的COM組件。這個方法是上面的方法5的簡化版,現(xiàn)在軟件的配置大多寫在注冊表中的"HKEY_LOCLAL_MACHINE\SOFTWARE\軟件公司名字"和"HKEY_CURRENT_USER\SOFTWARE\軟件公司名字"這2個鍵下面,直接對把這2個注冊表鍵導(dǎo)出到REG文件中。自注冊的COM組件都需要導(dǎo)出如下4個函數(shù):DllCanUnloadNow,DllGetClassObject,DllRegisterServer, DllUnregisterServer,可以用vc自帶的depend.exe找出哪一個動態(tài)鏈接庫是自注冊的COM組件。最后寫一個批處理文件用regsvr32.exe注冊COM組件和用regedit.exe導(dǎo)入注冊表。 通過上面分析安裝程序的動作,把安裝程序的工作分解為復(fù)制文件,注冊COM組件,安裝服務(wù)驅(qū)動,注冊表配置等幾個部分,雖然注冊表配置可以覆蓋注冊COM組件,安裝服務(wù)驅(qū)動等操作步驟,但是把這些明顯分割出來有助于制作綠色安裝的軟件。對于需要更復(fù)雜的步驟來安裝的軟件,還是使用原來的安裝程序比較保險。 具體事例 : winrar3.30 和Winzip9.0 1,解壓縮。下載Winzip90.exe和winrar330sc.exe后,在一個安裝了Winrar的系統(tǒng)上,用鼠標(biāo)右鍵選擇下載的文件,運(yùn)行右鍵菜單中的用Winrar打開命令,然后把文件解壓到目標(biāo)路徑,如E:\tools目錄,就可以了。然后分別對Winzip9和Winrar進(jìn)行設(shè)置就可以了。運(yùn)行winzip9目錄中的Winzip32.exe,進(jìn)行winzip設(shè)置。Winrar也一樣,運(yùn)行Winrar.exe,打開菜單選項(xiàng)-〉設(shè)置,彈出一個對話框,選擇標(biāo)簽--集成,逐項(xiàng)對Winrar設(shè)置。當(dāng)拷貝到U盤而到新的機(jī)器上運(yùn)行時,需要重復(fù)這些設(shè)置過程。 這一類軟件特點(diǎn)是安裝程序工作完全可以由軟件自身來完成,從而完全拋開安裝程序,或者說安裝程序的工作也就是解壓縮。 類似的軟件還有一些,最簡單的測試辦法就是看看Winrar能否直接打開壓縮的安裝程序。也可以采用方法2,過程基本上和方法1一樣。 方法2就不具體說明了,僅僅指出有許多程序?qū)儆谶@個類別,如Myie2,GreenBrowser,qq,BPFTP Server,IDA_Pro_Standard_4.5.1.770,F(xiàn)inalData,EASYRECOVERY 6.03,騰遜公司的TM等。 flashget是大家用得比較多的一個軟件,可以多線程下載并且下載管理的功能也很方便,下載flashget1.60a國際版,運(yùn)行下,然后取消安裝。從上可看出flashget1.60a國際版是使用Wise制作安裝程序,下載wungui程序,非常容易的把安裝程序解壓縮到一個目錄中,觀察Maindir目錄,其中有兩個DLL文件Jccatch.dll和fgiebar.dll,進(jìn)一步察看這兩個動態(tài)庫文件導(dǎo)出函數(shù),可以知道這兩個文件都是自注冊COM組件,寫一個批處理文件install.bat來注冊這兩個DLL:REGSVR32 JCCATCH.DLL /s REGSVR32 fgiebar.dll /s 經(jīng)過測試,功能正常,且可從瀏覽器IE中用鼠標(biāo)右鍵菜單激活flashget,功能完全,下面考慮卸載過程: 運(yùn)行Regedit.exe,發(fā)現(xiàn)flashget在注冊表中路徑是[HKEY_CURRENT_USER\\Software\\JetCar\\JetCar],寫一個注冊表文件unflashget.reg刪除這個路徑,如下: REGEDIT4 ; flashget [-HKEY_CURRENT_USER\\Software\\JetCar\\JetCar] 同時寫一個批處理文件uninstall.bat來卸載這兩個DLL文件并導(dǎo)入unflashget.reg: Regedit unflashget.reg /s REGSVR32 JCCATCH.DLL /s /U REGSVR32 fgiebar.dll /s /U 隨后就是刪除一些用不到的文件,比如language目錄的絕大多數(shù)歐洲語言文件,這時候這個綠色版本就做好了。 把作好的綠色的flashget拷貝到U盤上,需要用的時候,直接執(zhí)行里面的install.bat文件就可以了(注意,要在flashget的目錄運(yùn)行批處理文件),不需要任何文件拷貝。 我看到有人提到用優(yōu)化大師提取falshget的注冊表,然后直接導(dǎo)入注冊表來制作綠色的flashget,是不行的,從我前面的步驟來看,注冊2個DLL文件必然在注冊表中引入了絕對路徑,那如果直接提取注冊表話,就必須根據(jù)當(dāng)前路徑來修改注冊表中路徑,否則制作的綠色版flashget只能在固定目錄運(yùn)行。在制作flashget綠色版時,我同時使用了方法3和方法6,使用方法3目的就是避免安裝程序?qū)ο到y(tǒng)作修改,這樣可直接在當(dāng)前系統(tǒng)進(jìn)行測試,而不需到另外一個沒有安裝過flashget的系統(tǒng)測試。 Editor是方法1的一個反例。Emeditor可以從開發(fā)商主頁http://www./下載,是一個簡單好用的文本編輯器,支持多種配置,自定義顏色、字體、工具欄、快捷鍵設(shè)置,可以調(diào)整行距,避免中文排列過于緊密,具有選擇文本列塊的功能(按ALT 鍵拖動鼠標(biāo)),并允許無限撤消、重做,總之功能多多,使用方便,是替代記事本的最佳編輯器。 下載emed404epx.exe后,發(fā)現(xiàn)用Winrar可打開,解壓后,運(yùn)行Emeditor,發(fā)現(xiàn)丟失了預(yù)定義的多種文本格式的語法配置,看來這樣做不行,只好采用方法5了。請隨我一步步進(jìn)行,步驟如下: 1 掃描系統(tǒng),制訂系統(tǒng)快照。這里我僅僅記錄當(dāng)前系統(tǒng)的注冊表(因?yàn)槲艺J(rèn)為Emeditor不會向系統(tǒng)目錄拷貝文件,如果判斷錯誤,就會導(dǎo)致"綠化"失?。?,運(yùn)行ART(Advanced Registery Tracer),掃描一遍注冊表。不要關(guān)閉ART。 2 安裝Emeditor。隨便安裝到哪里,反正一會就卸載。安裝好后,如果需要的話,更改配置,或者配置新的文件類型,例如我就增加了NFO文件類型,設(shè)定和NFO文件相關(guān)聯(lián)的字符集,這樣可以用Emeditor直接察看NFO文件,不需要專門的察看工具了。 3記錄系統(tǒng)變化。再一次掃描系統(tǒng),給系統(tǒng)作快照,從ART里面再一次掃描注冊表,然后選擇菜單命令Registry-〉compare here或者直接用鍵盤F10,點(diǎn)擊那個save to redo file的按鈕,存儲為Emeditor.reg文件,關(guān)閉ART。 4 復(fù)制并卸載。復(fù)制安裝好的Emeditor目錄到其他路徑,然后卸載Emeditor程序。 5 分析。打開剛剛導(dǎo)出的Emeditor.reg文件,這是一個巨大的reg文件,單單是REG文件就有1兆多,不過不用擔(dān)心。閱讀注冊表后,刪除和emeditor無關(guān)的注冊表項(xiàng)后,如僅僅和資源管理器相關(guān)的注冊表部分,發(fā)現(xiàn)剩下的注冊表文件可以分成3個部分。一部分在位于注冊表的這個路徑[HKEY_LOCAL_MACHINE\\SOFTWARE\\EmSoft],里面大部分不涉及路徑,只有一項(xiàng)記錄了Emeditor的路徑,就是\"ModulePath\"=\"h:\\\\EmEditor4\\\\\";還有一大部分在注冊表的這個路徑下面[HKEY_CURRENT_USER\\Software\\EmSoft\\EmEditor v3],里面有很多項(xiàng)都涉及了Emeditor的路徑,如\"Tmpl\"=\"h:\\\\EmEditor4\\\\template.xml\";還有就是和Emeditor和txt文件后綴向關(guān)聯(lián)的注冊表設(shè)置,把Emeditor設(shè)置為IE中缺省的源代碼察看工具的注冊表設(shè)置以及注冊COM組件EMEDSHL.DLL的注冊表部分(和InProcServer32相關(guān)的就是)。 6 "綠化"。 1) 把位于注冊表路徑路徑[HKEY_LOCAL_MACHINE\\SOFTWARE\\EmSoft]的內(nèi)容存儲到emeditor_HKLM.reg文件中,把位于注冊表路徑[HKEY_CURRENT_USER\\Software\\EmSoft\\EmEditor v3]的內(nèi)容存儲到emeditor_HKCU.reg文件中,把剩下的內(nèi)容首先除掉COM組件EMEDSHL.DLL的相關(guān)部分,然后存儲到emeditor_assoc.reg文件中。 2) 把emeditor_HKLM.reg文件和emeditor_HKCU.reg文件中涉及到路徑的注冊表內(nèi)容抽取出來,存儲到emeditorConf.reg文件。 3) 把emeditor_assoc.reg文件和emeditorConf.reg文件用INF的語法轉(zhuǎn)換為INF文件,或者用一個免費(fèi)小工具reg2inf.exe自動轉(zhuǎn)換,然后把轉(zhuǎn)換得到的emeditor_assoc.inf文件和emeditorConf.inf文件中的路徑h:\\EmEditor4全部用%01%代替。下面是emeditorConf.inf文件的內(nèi)容: [Version] Signature=\"CHICAGO\" [DefaultInstall] AddReg=EmeditorConf_AddReg hklm,\"SOFTWARE\\EmSoft\\EmEditor v3\\Common\",\"ModulePath\",,\"%01%\\\" hkcu,\"Software\\EmSoft\\EmEditor v3\\Config\\C++\",\"Tmpl\",,\"%01%\\template.cpp\" hkcu,\"Software\\EmSoft\\EmEditor v3\\Config\\CSS\",\"Tmpl\",,\"%01%\\template.css\" hkcu,\"Software\\EmSoft\\EmEditor v3\\Config\\HTML\",\"Tmpl\",,\"%01%\\template.htm\" hkcu,\"Software\\EmSoft\\EmEditor v3\\Config\\Java\",\"Tmpl\",,\"%01%\\template.java\" hkcu,\"Software\\EmSoft\\EmEditor v3\\Config\\javascript\",\"Tmpl\",,\"%01%\\template.js\" hkcu,\"Software\\EmSoft\\EmEditor v3\\Config\\JSP\",\"Tmpl\",,\"%01%\\template.jsp\" hkcu,\"Software\\EmSoft\\EmEditor v3\\Config\\Perl\",\"Tmpl\",,\"%01%\\template.pl\" hkcu,\"Software\\EmSoft\\EmEditor v3\\Config\\PHP\",\"Tmpl\",,\"%01%\\template.php\" hkcu,\"Software\\EmSoft\\EmEditor v3\\Config\\Python\",\"Tmpl\",,\"%01%\\template.py\" hkcu,\"Software\\EmSoft\\EmEditor v3\\Config\\Ruby\",\"Tmpl\",,\"%01%\\template.rb\" hkcu,\"Software\\EmSoft\\EmEditor v3\\Config\\TeX\",\"Tmpl\",,\"%01%\\template.tex\" hkcu,\"Software\\EmSoft\\EmEditor v3\\Config\\VBScript\",\"Tmpl\",,\"%01%\\template.vbs\" hkcu,\"Software\\EmSoft\\EmEditor v3\\Config\\VBScript for EmEditor\",\"Tmpl\",,\"%01%\\template.vbee\" hkcu,\"Software\\EmSoft\\EmEditor v3\\Config\\Windows Script\",\"Tmpl\",,\"%01%\\template.wsf\" hkcu,\"Software\\EmSoft\\EmEditor v3\\Config\\XML\",\"Tmpl\",,\"%01%\\template.xml\" ** 寫一個批處理文件install.bat,內(nèi)容如下: regedit emeditor_HKLM.reg regedit emeditor_HKCU.reg RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 128 .\\emeditorConf.inf regsvr32 EMEDSHL.DLL RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 128 .\\emeditor_assoc.inf ‘ 4) 把install.bat,emeditorConf.inf,emeditor_assoc.inf,emeditor_HKLM.reg,emeditor_HKCU.reg5個文件存儲到Emeditor的目錄,刪除其余的注冊表文件。 sysdiff工具: 本帖包含附件: sysdiff_hotfix.rar [附件大小:41.4kb, 查看信息...] 工具inctrl5 本帖包含附件: inctrl5.rar [附件大小:750.6kb, 查看信息...] 工具Regshot 本帖包含附件: RegShot V1.61e5 漢化版.zip [附件大小:23.3kb, 查看信息...] |
|