輕輕松松搞定Windows Installer
[2006-12-20 10:08:34] [作者:家用電腦] [責(zé)任編輯:黃瑩]
摘要:軟件的刪除與安裝是日常電腦操作最常用到的功能,凡是用的到Windows的用戶在安裝或刪除軟件時(shí),就難免會(huì)與Windows Installer打交道,相信很多朋友都曾遇到過(guò)Windows Installer無(wú)法運(yùn)行或運(yùn)行錯(cuò)誤的情況,這將導(dǎo)致正在進(jìn)行的安裝或卸載操作失敗。
軟件的刪除與安裝是日常電腦操作最常用到的功能,凡是用的到Windows的用戶在安裝或刪除軟件時(shí),就難免會(huì)與Windows Installer打交道,相信很多朋友都曾遇到過(guò)Windows Installer無(wú)法運(yùn)行或運(yùn)行錯(cuò)誤的情況,這將導(dǎo)致正在進(jìn)行的安裝或卸載操作失敗。這是微軟專門(mén)用來(lái)管理程序安裝、卸載等操作的程序。如果它要是鬧脾氣,你電腦用得一定不會(huì)舒坦,本文將向你全面介紹Windows Installer,幫你徹底擺平它。
查清底細(xì)——認(rèn)識(shí)Windows Installer
要想與Windows Installer和平相處,首先要做的就是了解它,只有了解了它的功能和工作原理,在出現(xiàn)問(wèn)題時(shí)我們才能對(duì)癥下藥,才能讓它好好地為我們工作。所以我們首先來(lái)介紹一下Windows Installer。
我們不能僅僅憑借Windows Installer這個(gè)名稱來(lái)判斷它的功能,準(zhǔn)確地說(shuō),它是一個(gè)可擴(kuò)展的軟件管理系統(tǒng),它可以支持如下的功能:管理軟件的安裝、管理軟件組件的添加和刪除、監(jiān)視文件的復(fù)原以及使用回滾技術(shù)維護(hù)基本的災(zāi)難恢復(fù)。利用Windows Installer用戶可以從多個(gè)源位置安裝和運(yùn)行軟件。其實(shí)使用Windows Installer進(jìn)行安裝是更加安全的一種方式,它可以在安裝過(guò)程中跟蹤安裝程序?qū)ο到y(tǒng)做出的任何更改,這樣無(wú)論是用戶希望刪除程序還是程序安裝不成功,使用Windows Installer都可以將系統(tǒng)恢復(fù)到安裝前的狀態(tài),這就是我們經(jīng)??梢詮奈④浤抢锫?tīng)到的“回滾”。
Windows Installer還充當(dāng)著程序間的“交通警”,在極少數(shù)的情況下,當(dāng)前的安裝或卸載操作可能會(huì)與現(xiàn)有程序共享某個(gè)動(dòng)態(tài)鏈接庫(kù)文件(文件擴(kuò)展名為.DLL的文件),這個(gè)安裝或卸載的進(jìn)程對(duì)共享動(dòng)態(tài)鏈接庫(kù)的操作可能影響到另外的程序,而Windows Installer可以為它們建立一個(gè)標(biāo)準(zhǔn)的安裝規(guī)則,并要求所有的程序都必須執(zhí)行這一規(guī)則,以避免沖突發(fā)生。由于Windows Installer完全跟蹤了整個(gè)安裝過(guò)程,所以它可以了解某個(gè)程序需要的所有文件,因此我們?cè)?#8220;添加/刪除程序”中使用的程序修復(fù)功能也是依賴Windows Installer完成的,它可以從安裝程序中提取當(dāng)前程序缺少的文件。Windows Installer還支持按需安裝程序功能,例如,我們?cè)诎惭b很多程序時(shí)使用的自定義安裝功能都是依賴Windows Installer來(lái)實(shí)現(xiàn)的。Windows Installer還能夠按照管理員指令編寫(xiě)程序安裝腳本,實(shí)現(xiàn)無(wú)人參與的程序安裝。
從結(jié)構(gòu)上說(shuō),Windows Installer包括兩個(gè)必不可少的部分:Msiexec.exe(客戶端安裝程序服務(wù))和MSI軟件包(Microsoft軟件安裝文件)。Msiexec.exe是Windows Installer的一個(gè)組件。在安裝過(guò)程開(kāi)啟后,Msiexec.exe會(huì)被安裝程序調(diào)用,Msiexec.exe會(huì)利用Msi.dll文件讀取MSI軟件包、MST文件(應(yīng)用轉(zhuǎn)換文件),并通過(guò)安裝命令進(jìn)行整個(gè)的安裝。
使用實(shí)戰(zhàn)——制作Windows Installer安裝包
相信很多對(duì)編程有一定了解的朋友,看了上邊那段內(nèi)容,都會(huì)對(duì)Windows Installer產(chǎn)生興趣。其實(shí)作為微軟官方發(fā)布的一種軟件的安裝方法,使用微軟的編程工具可以很方便地將軟件的安裝文件發(fā)布成Windows Installer安裝包。
如果你使用的是微軟的.net技術(shù)編寫(xiě)程序,使用微軟的.net安裝發(fā)布平臺(tái),可以通過(guò)幾次簡(jiǎn)單的點(diǎn)擊即可制作好Windows Installer的安裝包。Visual Studio.NET里提供了四種發(fā)布模板:安裝工程:為基于Windows的應(yīng)用程序建立安裝包;合并模塊工程(.msm):可以被多個(gè)程序共享的包組件;Web安裝工程:為一個(gè)Web應(yīng)用程序建立安裝包;Cab工程(.cab):創(chuàng)建cab文件。
具體制作的方法是,打開(kāi)Visual Studio IDE,選擇“File-New-Setup and Deployment Projects”,然后選擇“Setup Wizard”并設(shè)置工程的文件名和保存路徑,如圖1所示。
圖1 新建Windows Installer安裝文件
單擊“OK”后可以看到安裝工程向?qū)У臍g迎界面,安裝類型選擇Windows應(yīng)用程序,接著一路點(diǎn)擊“Next”。接著它會(huì)彈出對(duì)話框,讓用戶選擇需要添加的安裝程序文件和組件,以及其他一些所需要的文件,如文檔文件等。添加完成后繼續(xù)點(diǎn)擊“Next”。在最后出現(xiàn)的對(duì)話框中,你可以選擇一些編輯器來(lái)完善整個(gè)安裝過(guò)程,例如用文件系統(tǒng)編輯器,可以增加工程的輸出,文件和其他一些項(xiàng)到發(fā)布工程中,并且指定它們?cè)谀繕?biāo)計(jì)算機(jī)上的安裝位置;用注冊(cè)表設(shè)置管理編輯器,可以指定需要加入到目標(biāo)計(jì)算機(jī)的注冊(cè)表中的一些鍵值;用文件類型管理編輯器:建立目標(biāo)計(jì)算機(jī)上的文件關(guān)聯(lián)等。設(shè)置完成后即可將安裝程序發(fā)布成Windows Installer文件。
故障排錯(cuò)——解決Windows Installer出錯(cuò)問(wèn)題
對(duì)于普通用戶來(lái)說(shuō),可能并不需要自己去建立Windows Installer安裝文件,但是當(dāng)Windows Installer出現(xiàn)問(wèn)題時(shí),我們可能在運(yùn)行程序、安裝、卸載軟件時(shí)出現(xiàn)錯(cuò)誤,我們還需要了解在Windows Installer出現(xiàn)問(wèn)題時(shí)如何解決。
Windows Installer最常見(jiàn)的問(wèn)題是遇到“不能訪問(wèn)Windows Installer 服務(wù)??赡苣阍诎踩J较逻\(yùn)行Windows……”的提示,如圖2所示。這類故障可以參考以下解決步驟。選擇“開(kāi)始-運(yùn)行”,輸入“cmd”后回車,打開(kāi)命令行提示窗口,然后輸入:msiexec /unregserver,這樣可以將Windows Installer服務(wù)停用。然后再輸入:msiexec /regserver,啟用Windows Installer服務(wù),如圖3所示,一般這個(gè)問(wèn)題就可以解決了。
圖2 Windows Installer最常見(jiàn)的錯(cuò)誤
圖3 使用命令行重啟Windows Installer服務(wù)
但是如果無(wú)法解決,我們就需要嘗試重新安裝Windows Installer服務(wù)了,首先還是使用命令:msiexec /unregserver,將Windows Installer服務(wù)停用,然后重啟系統(tǒng)進(jìn)入安全模式,在“運(yùn)行”中輸入:%windir%\system32后回車,將msi.dll、msiexec.exe和msihnd.dll刪除,然后再在“運(yùn)行”中輸入:%windir%\system32\Dllcache,同樣刪除這個(gè)文件夾中的三個(gè)文件。
重啟Windows進(jìn)入正常模式,然后下載Windows Installer的安裝文件InstMsiW.exe,使用WinRAR將它解壓縮,解壓縮完成后,找到里邊的msi.inf,在上邊單擊鼠標(biāo)右鍵,選擇“安裝”,用同樣的方法安裝“mspatcha.inf”文件。再輸入:msiexec.exe /regserver,重啟Windows Installer。如果遇到重疊I/O操作導(dǎo)致Windows Installer無(wú)法正常運(yùn)行,同樣可以使用上邊的方法。
有的時(shí)候可能還會(huì)遇到“Windows Installer問(wèn)題,錯(cuò)誤5:拒絕訪問(wèn)”的錯(cuò)誤,對(duì)于這類錯(cuò)誤需要采用別的解決方法,首先你需要使用具有管理員權(quán)限的帳戶登錄,然后下載并重新安裝最新的Windows Installer 2.0版。打開(kāi)任務(wù)管理器,將里邊的進(jìn)程“ikernel.exe”結(jié)束掉。最后再刪除“C:\Program Files\Common Files\InstallShield\Engine”下的所有文件。通過(guò)上邊的操作后問(wèn)題一般就可以解決了,但是如果還是無(wú)法解決,一般就只可能是NTFS權(quán)限問(wèn)題了。打開(kāi)“資源管理器”,選擇“文件夾選項(xiàng)”,在里邊取消“使用簡(jiǎn)單文件共享”的勾選,然后右擊系統(tǒng)所在的分區(qū)盤(pán)符,如C,選擇“屬性”,再選擇“安全”標(biāo)簽,在里邊加入Everyone組,并賦予它“讀取”權(quán)限。然后再在“運(yùn)行”中輸入:gpedit.msc,進(jìn)入組策略中。選擇“用戶配置-管理模板-Windows 組件-Windows Installer”,雙擊里邊的“永遠(yuǎn)以高特權(quán)進(jìn)行安裝”,將它設(shè)置為啟用即可,如圖4所示。
圖4 設(shè)置Windows Installer以高權(quán)限運(yùn)行
給系統(tǒng)減負(fù)——清除Windows Installer的垃圾
Windows Installer可以幫助用戶恢復(fù)錯(cuò)誤軟件的特性決定了它必將在系統(tǒng)中建立大量的備份文件,而這些文件如果管理不善就可能產(chǎn)生垃圾,占用我們寶貴的硬盤(pán)空間,所以我們還需要手動(dòng)進(jìn)行清除。
當(dāng)使用Windows Installer進(jìn)行軟件安裝時(shí),安裝程序會(huì)在“%systemroot%\Installer”目錄中創(chuàng)建一個(gè)備份的安裝文件用于以后對(duì)軟件的各種操作。但是當(dāng)用戶在安裝或修改軟件的過(guò)程中取消了操作或補(bǔ)丁安裝必備條件不足而導(dǎo)致安裝失敗的時(shí)候,Windows Installer將退出安裝流程,但是并不會(huì)刪除釋放出來(lái)的文件,當(dāng)用戶再次運(yùn)行相同的操作時(shí),原來(lái)的內(nèi)容不會(huì)被覆蓋,而是繼續(xù)保留,這樣垃圾就產(chǎn)生了。
而我們需要做的就是將“%systemroot%\Installer”目錄里面無(wú)用的文件挑選出來(lái),軟件操作執(zhí)行完成后會(huì)在注冊(cè)表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Patches下面生成一個(gè)鍵,鍵名是一個(gè)32字節(jié)的GUID值,生成的鍵下會(huì)有一個(gè)鍵值,名稱固定為L(zhǎng)ocalPackage用于指向本地文件的路徑,如圖5所示。
圖5 查看安裝完成文件所在的路徑
記錄每一個(gè)鍵下的LocalPackage所指向文件的文件路徑,然后打開(kāi)“%systemroot%\Installer”目錄,將這個(gè)目錄根目錄下的所有MSP 文件挑出,與注冊(cè)表中內(nèi)容可以對(duì)應(yīng)的保留,剩下的MSP文件則可以刪除。
S-1-5-18指 Local System 用戶,大多數(shù)補(bǔ)丁都是以 S-1-5-18 安裝的。
如果你覺(jué)得上述操作比較麻煩,還可以考慮專門(mén)用于清理Windows Installer的工具,可以考慮使用WICleanup進(jìn)行清除,軟件可以從:http://www.kztechs.com/wicleanup/下載。軟件的使用方法很簡(jiǎn)單,這里就不再贅述了。
至此,Windows Installer就可以服服帖帖的為我們服務(wù)了,切記,由于大部分Windows下的程序都使用了Windows Installer進(jìn)行安裝,所以不要輕易刪除Installer中的內(nèi)容,否則可能導(dǎo)致某些軟件工作不正常。