批处理文件 - 以管理员身份运行,如果不删除批处理文件?

时间:2013-03-10 18:00:56

标签: batch-file uac administrator elevated-privileges

您好我已经制作了一个批处理文件,我需要以管理员身份运行。为此,我使用了这个脚本,我从here(StackOverflow)获取了它。

但我想要的是,如果用户选择不以管理员身份运行(单击否到UAC),程序将退出,批处理将自动删除它。

批处理文件删除它的命令是“del%0”,但我需要帮助,在这个脚本中,我可以放这个命令。 我尝试用“@exit / B”来设置它,但是如果你向UAC按YES或NO,那么批处理文件将被删除,然后批处理文件的其余部分无法执行

当用户向UAC按“否”时,任何人都可以帮助弄清楚如何只运行命令“del%0”?


@echo off
:checkPrivileges 
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges ) 

:getPrivileges 
if '%1'=='ELEV' (shift & goto gotPrivileges) 

setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs" 
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs" 
"%temp%\OEgetPrivileges.vbs" 
@exit /B 

:gotPrivileges 

谢谢你们 符文

2 个答案:

答案 0 :(得分:1)

如果我理解您的问题,您需要一种方法来检测是否取消了UAC提示。如果您使用我的Elevate32.exe或Elevate64.exe(下载ElevationToolkit1.zip)程序和-w选项,您可以检测到这一点,如果您取消UAC提示,它将返回退出代码1223(ERROR_CANCELLED)。

比尔

答案 1 :(得分:0)

我知道这是一个老问题但是发布解决方案仍然有用。
如果安装了Powershell,则不需要创建新的vbs脚本,可以检查ERRORLEVEL以检测是否取消了UAC提示。

把它放在你的脚本中:

@echo off
:checkPrivileges 
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges 
) else ( powershell "saps -filepath %0 -verb runas" >nul 2>&1)
if NOT '%errorlevel%' == '0' call :deleteSelf
exit /b


:deleteSelf
start /b "" cmd /c del "%~f0"&exit /b



REM No need for this label
::getPrivileges 
::if '%1'=='ELEV' (shift & goto gotPrivileges) 

::setlocal DisableDelayedExpansion
::set "batchPath=%~0"
::setlocal EnableDelayedExpansion
::ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs" 
::ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs" 
::"%temp%\OEgetPrivileges.vbs" 
::@exit /B 

:gotPrivileges 

我从dbenham的帖子here

中删除的删除方法