배치 파일(Batch File)을 사용하여 커맨드라인 명령어를 자동화하려 할 때, 관리자 권한이 필요할 때가 있습니다.
그러나 배치파일 내에 특별한 명령이 들어있지 않다면 관리자 권한이 요구되는 작업은 무시되거나 오류를 발생시킬 수 있습니다. 예를 들어 민감한 파일의 이름을 변경하거나 파일을 편집하고 생성하는 작업들은 일반 사용자가 쉽게 접근 및 실행할 수 없을 수도 있습니다.
따라서 파일 실행 전에 관리자 권한을 묻는 창을 띄워 파일 실행을 방해하지 않도록 내용을 추가해보겠습니다. 일반적으로 Windows 7 이상에서 관리자 권한을 얻기 위해서는 사용자 계정 컨트롤 (User Access Control, UAC)이라는 계정 관리 서비스에 의해서 관리자 권한을 사용하기 위한 승인을 받아야 합니다. 보통 프로그램을 설치하거나 실행할 때 쉽게 보게되는 아래와 같이 어두운 배경의 파란 박스가 사용자 계정 컨트롤 창입니다.
아래 배치 파일의 내용은 관리자 권한을 취득하는 모든 과정이 포함되어 있습니다.
UACAccess 라벨에서 UAC 창이 띄워지며, Done 라벨에서는 권한 취득 완료 시에 진행되는 내용입니다. 만약 사용자 계정 컨트롤 창이 떴음에도 사용자가 아니요(거부)를 클릭하면 커맨드 창은 종료됩니다.
이 과정은 CMD 명령어로 처리하기 어렵기 때문에 VB Script를 사용하여 진행해야 합니다. 따라서 배치파일 명령어에는 uac_get_admin.vbs라는 파일을 별도로 만들어서 실행하는 내용이 포함되어 있습니다.
@echo off set uaccheck=0 :CheckUAC >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if '%errorlevel%' NEQ '0' ( goto UACAccess ) else ( goto Done ) :UACAccess echo 관리자 권한을 취득해야 합니다. pause echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\uac_get_admin.vbs" set params = %*:"="" echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\uac_get_admin.vbs" "%temp%\uac_get_admin.vbs" del "%temp%\uac_get_admin.vbs" exit /b :Done echo 관리자 권한을 취득하였습니다. pause exit
이제 batch 파일을 관리자 권한으로 직접 실행할 필요가 없습니다. 실행하면 권한을 자동으로 확인한 후 관리자 권한이 없다면 요청할 것입니다.
Xcode에서 iOS 애플리케이션을 빌드(Archive)하고 App Store Connect에 앱을 업로드하는 도중, 아래와 같은 에러가 발생하면서 더…
INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…
리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…
JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…
NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…
View Comments
ㄱㅅㄱㅅ
감사합니다 잘보고 갑니다