Batch file 批处理文件-以管理员身份运行,如果不删除批处理文件?
嗨,我已经做了一个批处理文件,我需要作为管理员运行。为此,我使用了这个脚本,它来自(StackOverflow) 但我想要的是,如果用户选择不以管理员身份运行(单击NO to UAC),那么程序将退出,批处理将自动删除它自己 批处理文件删除自身的命令是“del%0”,但我需要帮助,以了解在该脚本中,我可以将该命令放在何处。 我试着把它放在“@exit/B”上,但是如果你对UAC按YES或NO,批处理文件将被删除,然后批处理文件的其余部分将无法执行 当用户对UAC按“否”时,任何人都可以帮助了解如何只运行命令“del%0”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按“否”时,任何人都可以帮助了解如
谢谢各位
符文如果我理解您的问题,您需要一种方法来检测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