您好我已经制作了一个批处理文件,我需要以管理员身份运行。为此,我使用了这个脚本,我从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
谢谢你们 符文
答案 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
中删除的删除方法