0

嗨,我制作了一个需要以管理员身份运行的批处理文件。为此,我使用了从这里(StackOverflow) 获取的这个脚本。

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

批处理文件自行删除的命令是“del %0”,但我需要有关此脚本中何处的帮助,我可以放置此命令。我尝试将它与“@exit /B”一起使用,但是如果您按 YES 或 NO 到 UAC,批处理文件将被删除,然后批处理文件的其余部分无法执行

当用户对 UAC 按下“NO”时,任何人都可以帮助弄清楚如何只运行命令“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 

谢谢你们 符文

4

2 回答 2

1

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

账单

于 2013-03-10T18:42:33.507 回答
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 的帖子中获取的删除方法

于 2014-07-10T20:50:46.150 回答