2013-03-10 84 views
0

嗨我做了一个批处理文件,我需要以管理员身份运行。为此,我使用这个脚本,我从here(StackOverflow)中获取。批处理文件 - 以管理员身份运行,如果不删除批处理文件?

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

批处理文件中的命令来删除它的自我是“德尔%0”,但我需要帮助,因为到这个剧本,我可以把这个命令。 我试图把它与“@exit/B”,但然后该批处理文件将删除,如果您按是或否到UAC,然后批处理文件的其余部分不能执行

任何人都可以帮忙找出当用户按下“否​​”到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 

谢谢你们 符文

回答

1

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

比尔

+0

了有没有办法做到这一点没有你的软件? – 2013-03-10 21:31:58

+0

我怀疑没有外部可执行文件会很简单。外部工具不应该成为一个障碍,因为它是免费的。 – 2013-03-10 23:14:09

+0

假设您有权下载软件。 – 2013-03-10 23:59:15

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

相关问题