深度分析Win 2003自動(dòng)升級(jí)補(bǔ)丁功能(圖)
有讀者反映使用批處理Windows自動(dòng)升級(jí)文件有問(wèn)題。有些補(bǔ)丁包安裝時(shí)出現(xiàn)了錯(cuò)誤提示,無(wú)法繼續(xù)。
經(jīng)過(guò)研究,發(fā)現(xiàn)這是由于Windows主要有兩類(lèi)不同的補(bǔ)丁程序,需要使用不同的參數(shù),一旦參數(shù)錯(cuò)誤,會(huì)導(dǎo)致無(wú)法安裝,所以對(duì)不同補(bǔ)丁需要使用不同的參數(shù)。我們來(lái)具體分析一下。從圖片看補(bǔ)丁類(lèi)型如圖1,把Windows 2003 Server的補(bǔ)丁文件放在同一個(gè)目錄,
可以清楚地看到補(bǔ)丁文件名字前面的圖標(biāo)有兩種類(lèi)型,一種是簡(jiǎn)單的可執(zhí)行文件圖標(biāo),另外一種是標(biāo)志壓縮文件的可執(zhí)行文件圖標(biāo)。
從屬性分析格式WindowsServer2003-KB823559-x86-ENU.exe文件的圖標(biāo)是一個(gè)簡(jiǎn)單的可執(zhí)行文件圖標(biāo)。從圖2中可以看到該補(bǔ)丁的幫助信息,發(fā)現(xiàn)它使用微軟的update程序來(lái)安裝補(bǔ)丁。從圖3可以查看該補(bǔ)丁的版本信息,它是由SFXCAB.EXE制作而成,所有其他具有普通可執(zhí)行文件圖標(biāo)的補(bǔ)丁程序都有類(lèi)似性質(zhì)。
DirectX9-KB819696-x86-ENU.exe文件的圖標(biāo)是一個(gè)標(biāo)志壓縮文件的可執(zhí)行文件圖標(biāo),可以查看該補(bǔ)丁的幫助信息。它所認(rèn)識(shí)的參數(shù)不包括/U和/Z,如果使用/U 參數(shù)來(lái)運(yùn)行就會(huì)產(chǎn)生錯(cuò)誤。同樣,查看該補(bǔ)丁的版本信息,可以看出DirectX9-KB819696-x86-ENU這個(gè)補(bǔ)丁是由WEXTRACT.EXE而來(lái)的,所有其他的具有標(biāo)志壓縮文件的可執(zhí)行文件圖標(biāo)的補(bǔ)丁程序也都有類(lèi)似特征。
現(xiàn)在很清楚了Windows有兩類(lèi)不同的補(bǔ)丁,使用不同的補(bǔ)丁程序,需要參數(shù)也不一樣。
自動(dòng)分清補(bǔ)丁的格式如何在批處理文件中區(qū)分這兩類(lèi)不同的補(bǔ)丁呢?最穩(wěn)妥的辦法是找一個(gè)小程序檢測(cè)補(bǔ)丁文件資源信息,如果補(bǔ)丁資源中包括了一個(gè)標(biāo)志壓縮文件的可執(zhí)行文件圖標(biāo),那么該補(bǔ)丁就是第二類(lèi)補(bǔ)丁,僅僅使用/Q參數(shù),如果補(bǔ)丁資源中不包括圖標(biāo),那么就是第一類(lèi)補(bǔ)丁,可以使用/U /Q /Z參數(shù)來(lái)安裝補(bǔ)丁。這里給出一個(gè)更簡(jiǎn)單的方法,僅僅使用Windows的內(nèi)部命令,不需要額外程序了。查找補(bǔ)丁文件中的特征字符串,如果一個(gè)字符串僅僅在某一類(lèi)補(bǔ)丁程序中存在,就可以根據(jù)這個(gè)來(lái)區(qū)分補(bǔ)丁的類(lèi)型。第一步:如圖4,用文本編輯器分別打開(kāi)WindowsServer2003-KB823559-x86-ENU.exe 文件和DirectX9-KB819696-x86-ENU.exe文件,可以找到很多特征字符串,如字符串“_SFX_CAB_EXE_PATH”僅僅存在于SFXCAB.EXE類(lèi)型的補(bǔ)丁中,而字符串“CABINET”和“WEXTRACT”僅僅存在于WEXTRACT.EXE類(lèi)型的補(bǔ)丁文件中。所以可以用查找字符串的方法來(lái)決定補(bǔ)丁文件的類(lèi)型。
第二步:在“開(kāi)始→運(yùn)行”菜單中輸入“cmd”,然后進(jìn)入補(bǔ)丁所在文件夾,運(yùn)行如下命令,就可以指明該補(bǔ)丁文件需要的參數(shù):(@findstr _SFX_CAB_EXE_PATH 補(bǔ)丁文件名字 >nul && @echo 參數(shù) /U /Q /Z) || @echo 參數(shù) /Q上面命令的意思是如果查找到字符串_SFX_CAB_EXE_PATH,就說(shuō)明補(bǔ)丁使用 /U /Q /Z參數(shù) ,否則使用/Q參數(shù)。第三步:運(yùn)行結(jié)果如圖5所示。
一勞永逸的簡(jiǎn)單方法如果先識(shí)別判斷,再根據(jù)結(jié)果加參數(shù),然后再運(yùn)行批處理,未免太麻煩了。這里給出完整的批處理命令,可以把判斷和安裝補(bǔ)丁合二為一:FOR /R %%F IN (*.exe) DO @((@findstr _SFX_CAB_EXE_PATH '%%F' >nul && @start /wait %%F /U /Q /Z ) || @start /wait %%F /Q )qchain.exe把該批處理文件放在補(bǔ)丁目錄,不需要把補(bǔ)丁文件集中到同一個(gè)目錄中,for命令的/R參數(shù)會(huì)自動(dòng)搜索所有子目錄。注意:對(duì)于2002年12月份后的補(bǔ)丁,基本上不需要使用qchain這個(gè)命令,新補(bǔ)丁都內(nèi)置了這個(gè)命令。
