2016-07-28 3 views
3

다른 스레드에서 제안 된 추가 VBS 파일이나 상승 된 단축키를 사용하지 않고 실행중인 배치를 자동으로 높이기위한 간단하고 안정적인 방법을 파생 시키려고합니다. 자바 스크립트를 통해 배치에서 UAC 대화 상자를 호출하면 간단한 간단한 코드가 보장됩니다. 예를 대화 상자에서 선택한 경우javascript를 사용하여 관리자로 배치를 실행하는 간단한 방법

은 자동으로 아래의 스크립트는 제대로 관리자 권한에 사용자를 끌어 올리고 있지만 (Cmd를 창 외부) 오류 대화 상자 팝업은 "윈도우 'TEST.BAT'를 찾을 수 없습니다." 파일 경로가 공백을 포함하고 있기 때문에 가능합니까? 코드를 수정하거나이 오류 팝업을 표시하지 않으려면 어떻게해야합니까?

@echo off 
:: test admin rights 
>nul 2>&1 net file 
echo '%errorlevel%' 
MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute("%~nx0", '', '', 'runas', 1);close();" 
:: test admin rights 
>nul 2>&1 net file 
echo '%errorlevel%' 
if !errorlevel! equ 0 echo Hello >%temp%\tst.txt 
exit /b 

답변

0

스크립트가 수정되어 이제는 훌륭하게 실행됩니다. 필자의 연구에 따르면 이것은 게시 된 실행중인 배치에서 해당 Cmd 세션 기간 동안 일반 사용자에게 관리자 권한을 동적으로 부여하는 가장 간단한 방법입니다.

기능, 하이브리드 배치 & VBS 구성, 추가 파일 또는 상승 된 단축키를 사용할 필요가 없습니다. Windows에 기본입니다. 사용자는 :usercode 섹션에 자신의 작업 코드를 추가하여 배치별로 실행할 수 있습니다.

@echo off 
setlocal EnableDelayedExpansion 
:: test and acquire admin rights 
cd /d %~dp0 & echo/ 
if not "%1"=="UAC" (
    >nul 2>&1 net file && echo Got admin rights || (echo No admin rights &^
MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute("%~snx0", 'UAC', '', 'runas', 1);close();")) 
:: re-test admin rights 
echo/ & >nul 2>&1 net file && (echo Got admin rights & echo/) || (echo No admin rights. Exiting... & goto :end) 

:usercode 
:: add your code here 
echo Performing admin tasks 
echo Hello >C:\test.txt 

:end 
timeout /t 5 >nul 
exit /b 
+0

나는 아직도이 "~ snx0 %"가 아닌 "% ~ dpsnx0"하지으로 동작하지 않습니다 =/내 작업 디렉토리는 여전히 그것의 불평 그래서 내 스크립트 디렉토리와 동일하지 않습니다 내 .cmd를 찾을 수 없습니다 - 또한 MSHTA가 경로의 슬래시를 제거하는 것으로 나타났습니다. - POPD "% ~ dp0"을 사용하여 작업했습니다. –