Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件-以管理员身份运行,如果不删除批处理文件?_Batch File_Uac_Administrator_Elevated Privileges - Fatal编程技术网

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

Batch file 批处理文件-以管理员身份运行,如果不删除批处理文件?,batch-file,uac,administrator,elevated-privileges,Batch File,Uac,Administrator,Elevated Privileges,嗨,我已经做了一个批处理文件,我需要作为管理员运行。为此,我使用了这个脚本,它来自(StackOverflow) 但我想要的是,如果用户选择不以管理员身份运行(单击NO to UAC),那么程序将退出,批处理将自动删除它自己 批处理文件删除自身的命令是“del%0”,但我需要帮助,以了解在该脚本中,我可以将该命令放在何处。 我试着把它放在“@exit/B”上,但是如果你对UAC按YES或NO,批处理文件将被删除,然后批处理文件的其余部分将无法执行 当用户对UAC按“否”时,任何人都可以帮助了解如

嗨,我已经做了一个批处理文件,我需要作为管理员运行。为此,我使用了这个脚本,它来自(StackOverflow)

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

批处理文件删除自身的命令是“del%0”,但我需要帮助,以了解在该脚本中,我可以将该命令放在何处。 我试着把它放在“@exit/B”上,但是如果你对UAC按YES或NO,批处理文件将被删除,然后批处理文件的其余部分将无法执行

当用户对UAC按“否”时,任何人都可以帮助了解如何只运行命令“del%0”



谢谢各位
符文

如果我理解您的问题,您需要一种方法来检测UAC提示是否被取消。如果将我的Elevate32.exe或Elevate64.exe(下载)程序与-w选项一起使用,则可以检测到此问题。如果取消UAC提示,此选项将返回退出代码1223(错误\u已取消)


比尔

我知道这是个老问题,但发布解决方案仍然很有用。
如果已安装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的帖子中采用的delete方法

是否有一种方法可以在没有软件的情况下实现这一点?我怀疑在没有外部可执行文件的情况下这样做是否简单。外部工具不应该成为障碍,因为它是免费软件。假设你有下载软件的权限。是的,这取决于组织。然而,根据我的经验,如果该工具符合需要并且是免费的,那么通常情况下,它可以由安全部门进行审查并允许使用。
@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