引言:在Windows 7環(huán)境下,當(dāng)使用普通用戶賬號(hào)運(yùn)行某些應(yīng)用程序時(shí),系統(tǒng)會(huì)彈出對(duì)話框要求輸入管理員賬號(hào)和密碼,否則無(wú)法運(yùn)行。但同一個(gè)應(yīng)用程序在Windows XP環(huán)境下卻能基本運(yùn)行。為了安全起見,公司電腦一般都不會(huì)賦予用戶賬號(hào)管理員權(quán)限,這樣很多程序無(wú)法在Windows 7下運(yùn)行。我們可以通過(guò)修改Manifest文件,來(lái)控制應(yīng)用程序的運(yùn)行權(quán)限。
在Windows 7環(huán)境下,當(dāng)使用普通用戶賬號(hào)運(yùn)行某些應(yīng)用程序(程序圖標(biāo)顯示有盾牌)的時(shí)候,系統(tǒng)會(huì)彈出對(duì)話框,要求輸入管理員賬號(hào)和密碼,否則無(wú)法運(yùn)行。也就是說(shuō),這類應(yīng)用程序只允許管理員運(yùn)行,普通用戶則完全無(wú)法運(yùn)行。
但同一應(yīng)用程序在Windows XP環(huán)境下卻能基本運(yùn)行,只是部分功能因沒(méi)有管理員權(quán)限而無(wú)法使用。為安全起見,公司電腦一般都不會(huì)賦予用戶賬號(hào)管理員權(quán)限,
這樣一來(lái),很多程序都會(huì)無(wú)法在Windows 7下運(yùn)行,會(huì)造成相當(dāng)?shù)牟槐?。這是由于Windows的UAC(用戶賬戶控制)安全機(jī)制導(dǎo)致的。
Windows從Vsita開始引入用戶賬戶控制機(jī)制,當(dāng)應(yīng)用程序需要進(jìn)行一些操作系統(tǒng)層面,或者影響其他用戶操作的設(shè)置,比如更改控制面板設(shè)置、刪除系統(tǒng)文件、修改注冊(cè)表等,操作系統(tǒng)便會(huì)彈出對(duì)話框,提示用戶輸入管理員賬號(hào)密碼,獲得許可后方能繼續(xù)。
UAC的這種臨時(shí)提升用戶權(quán)限的設(shè)計(jì),大大提高了Windows的安全性,應(yīng)用程序的一些操作必須要獲取到管理員用戶的許可方能運(yùn)行,這樣可以防止惡意軟件和間諜軟件在未經(jīng)許可的情況下,在計(jì)算機(jī)上運(yùn)行安裝或者對(duì)計(jì)算機(jī)進(jìn)行更改。
凡是圖標(biāo)顯示有盾牌的可執(zhí)行文件,都需要管理員權(quán)限才能完全正常地運(yùn)行,但也有可能該應(yīng)用程序只是部分功能需要管理員權(quán)限而已。很多情況下,我們只需使用應(yīng)用程序的一般功能,所以我們需要強(qiáng)制可執(zhí)行文件以普通用戶權(quán)限運(yùn)行。
默認(rèn)情況下,可執(zhí)行文件EXE是以當(dāng)前用戶權(quán)限運(yùn)行的,那么操作系統(tǒng)是如何知道應(yīng)用程序需要使用管理員權(quán)限運(yùn)行而彈出對(duì)話框提示用戶呢?
操作系統(tǒng)是通過(guò)讀取Manifest清單文件來(lái)獲取EXE文件運(yùn)行所需的權(quán)限。Manifest清單文件是一個(gè)后綴為.manifest的XML文件,保存了應(yīng)用程序的配置元數(shù)據(jù)。該Manifest可作為文件存儲(chǔ)在應(yīng)用程序相同的目錄下,也可作為一種資源嵌入在可執(zhí)行文件內(nèi)部。
我們可以通過(guò)修改Manifest文件,來(lái)控制應(yīng)用程序的運(yùn)行權(quán)限。以下為外置和內(nèi)置兩種清單文件的修改方法。
以軟件“一號(hào)店在線客服”為例,軟件安裝后,修改程序目錄(C:Program Files (x86)yhd)的文件夾權(quán)限,編輯Users用戶組,添加“修改和寫入”權(quán)限。在“高級(jí)”菜單中,勾選“更改權(quán)限→使用可從此對(duì)象繼承的權(quán)限替代所有子對(duì)象項(xiàng)目”。然后以普通用戶賬號(hào)登錄,運(yùn)行主程序(im-desktop.exe),系統(tǒng)彈出UAC對(duì)話框。
用記事本編輯跟程序位于同一目錄的im-desktop.exe.manifest文件(如圖1)
配置中有一個(gè)requestedExecutionLevel項(xiàng),這個(gè)項(xiàng)用于配置當(dāng)前應(yīng)用請(qǐng)求的執(zhí)行權(quán)限級(jí)別。這個(gè)項(xiàng)有3個(gè)值可供選擇:
asInvoker:應(yīng)用程序就是以當(dāng)前的權(quán)限運(yùn)行。highestAvailable:應(yīng)用程序以當(dāng)前用戶可以獲得的最高權(quán)限運(yùn)行。requireAdministrator:應(yīng)用程序僅以系統(tǒng)管理員權(quán)限運(yùn)行。
所以,我們只需要將requestedExecutionLevel項(xiàng)目設(shè)置為asInvoker或者h(yuǎn)ighestAvailable,程序就能以當(dāng)前用戶賬號(hào)正常運(yùn)行了。其中,highestAvailable和requireAdministrator這兩個(gè)選項(xiàng)都可以提示用戶獲取系統(tǒng)管理員權(quán)限。
圖1 編輯im-desktop.exe.manifest文件
圖2 點(diǎn)擊左側(cè)的Manifest→1:1033
兩個(gè)選項(xiàng)的區(qū)別在哪里呢?它們的區(qū)別在于,如果我們不是以管理員賬戶登錄,而應(yīng)用程序設(shè)置為requireAdministrator,那 么應(yīng)用程序就直接運(yùn)行失敗,無(wú)法啟動(dòng),也就是強(qiáng)制程序以管理員賬號(hào)運(yùn)行。而如果設(shè)置為highestAvailable,則應(yīng)用程序可以運(yùn)行成功,只是以當(dāng)前賬號(hào)的最高權(quán)限運(yùn)行而不是系統(tǒng)管理員權(quán)限運(yùn)行。另外,直接將該Manifest文件刪除也可以強(qiáng)制操作系統(tǒng)以當(dāng)前用戶運(yùn)行。
以軟件“美圖秀秀”為例,安裝軟件后,使用普通賬號(hào)運(yùn)行會(huì)彈出UAC對(duì)話框,
因其Manifest清單文件內(nèi)置在EXE文件里,無(wú)法直接編輯。
(1)首先下載并安裝可執(zhí)行文件編輯軟件Resource Hacker(http://www.angusj.com/resourcehacker/)。
(2)接著,用管理員賬號(hào)運(yùn)行Resource Hacker
軟件(鼠標(biāo)右鍵主程序以管理員身份運(yùn)行),然后點(diǎn)擊“File→ Open”,選 擇 美圖秀秀的主程序Xiuxiu.exe,點(diǎn)擊左側(cè)的資源列表中的 Manifest→ 1:1033(如圖2)。這時(shí)候就看到了內(nèi)置在EXE文件中的清單文件內(nèi)容了,該文件內(nèi)容和需要修改的內(nèi)容都跟之前外置的清單文件一樣,只要將requestedExecutionLevel項(xiàng)目修改為asInvoker或者h(yuǎn)ighestAvailable即可。
(3)修改后,點(diǎn)擊工具欄中的Compile Script,接著點(diǎn)擊Save,程序會(huì)自動(dòng)備份原文件為XiuXiu_original.exe。
(4)注銷并重新登錄一下當(dāng)前的普通用戶,運(yùn)行xiuxiu.exe,程序就可以順利運(yùn)行了。
現(xiàn)在,越來(lái)越多的應(yīng)用程序運(yùn)行時(shí)需要提升權(quán)限到管理員級(jí)別,這樣可以提高軟件的使用體驗(yàn)。但是,企業(yè)辦公電腦由于安全性和管理的需要,一般不允許賦予普通用戶本機(jī)管理員的權(quán)限,這樣一來(lái),很多軟件都無(wú)法使用。通過(guò)關(guān)閉UAC功能或者修改Manifest清單文件,都可以令普通用戶能基本運(yùn)行這類應(yīng)用程序。不過(guò),關(guān)閉UAC后,即與Windows XP環(huán)境軟件的運(yùn)行機(jī)制類似,只能通過(guò)鼠標(biāo)右鍵選擇“運(yùn)行為”來(lái)提升運(yùn)行權(quán)限,而且基于安全性的考慮,不建議關(guān)閉UAC功能。
需要注意的是,修改清單文件后,不能保證軟件可以百分百正常運(yùn)行,修改后有時(shí)需要注銷再登錄當(dāng)前用戶或者重啟系統(tǒng)才會(huì)生成。還有,清單文件修改前要注意對(duì)EXE文件和Manifest文件原文件做好備份。