Ben Gripka의 솔루션은 무한 루프를 일으 킵니다. 그의 배치는 다음과 같이 작동합니다 (의사 코드).
IF "no admin privileges?"
"write a VBS that calls this batch with admin privileges"
ELSE
"execute actual commands that require admin privileges"
보시다시피 VBS가 관리자 권한 요청에 실패하면 무한 루프가 발생합니다.
그러나 관리자 권한이 성공적으로 요청되었지만 무한 루프가 발생할 수 있습니다.
Ben Gripka의 배치 파일 검사는 오류가 발생하기 쉽습니다. 배치를 가지고 놀았고 확인이 실패했지만 관리자 권한을 사용할 수 있음을 관찰했습니다. 흥미롭게도, Windows 탐색기에서 배치 파일을 시작한 경우 확인이 예상대로 작동했지만 IDE에서 파일을 시작했을 때는 그렇지 않았습니다.
따라서 두 개의 개별 배치 파일을 사용하는 것이 좋습니다. 첫 번째는 두 번째 배치 파일을 호출하는 VBS를 생성합니다.
@echo off
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"=""
echo UAC.ShellExecute "cmd.exe", "/c ""%~dp0\my_commands.bat"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
"my_commands.bat"라는 두 번째는 첫 번째와 동일한 디렉토리에 있으며 실제 명령은 다음과 같습니다.
pushd "%CD%"
CD /D "%~dp0"
REM Your commands which require admin privileges here
이로 인해 무한 루프가 발생하지 않으며 오류가 발생하기 쉬운 관리자 권한 검사도 제거됩니다.