最近有個專案需要執行批次檔,來進行某些設定或者城市的安裝,在XP上這個Script可以運行沒問題,可是一到Vista以後的Windows版本就無法運行了,最主要的原因是,UAC的管制的問題,幾經尋找,總算找到一個可行的解決辦法。
其實在該批次檔上按右鍵 --> 選擇已系統管理員身分執行,就可以讓批次檔被授權用管理者身分,但是如果要執行自動安裝就會成為一個困擾,因此才去找了這個解決方法。
解決方法:
透過建立一個getadmin.vbs並且呼叫該VB Script啟動runas的機制,然後就可以讓批次檔取得管理者權限。
完整Script如下:
:-------------------------------------
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------
在需要取得管理者權限的Batch檔前面加上此段Script就可以讓該批次檔透過管理者權限執行了。
參考資料:
1.Wiki UAC:http://en.wikipedia.org/wiki/User_Account_Control
2.原始資料來源:https://sites.google.com/site/eneerge/home/BatchGotAdmin
留言