感谢各位的帮助。虽然还是没有找到好的办法来请求管理员权限,但是已经找到了测试当前批处理是否具有管理员权限的办法。
办法1 写入文件法
向System32文件夹写入临时文件,若能写入成功,则说明批处理具有管理员权限,否则说明不具有。
代码如下:
方法2 窗口标题判断法
以管理员身份运行的批处理,设置标题后,标题前方会提示 "管理员: " ,可判断特定窗口标题所对应的进程名是否为cmd.exe 来确认批处理是否以管理员身份运行。代码如下:
办法1 写入文件法
向System32文件夹写入临时文件,若能写入成功,则说明批处理具有管理员权限,否则说明不具有。
代码如下:
-
C/C++ code
-
@ECHO OFF Rem 创建文件路径 set TempFile_Name =% SystemRoot % \System32\BatTestUACin_SysRt % Random % .batemp echo % TempFile_Name % Rem 写入文件 ( echo " BAT Test UAC in Temp " >% TempFile_Name % ) 1 > nul 2 > nul Rem 判断写入是否成功 if exist % TempFile_Name % ( echo 正在以管理员身份运行当前批处理 ) else ( echo 没有以管理员身份运行当前批处理 ) pause Rem 删除临时文件 del % TempFile_Name % 1 > nul 2 > nul echo 按空格键退出…… pause > nul
方法2 窗口标题判断法
以管理员身份运行的批处理,设置标题后,标题前方会提示 "管理员: " ,可判断特定窗口标题所对应的进程名是否为cmd.exe 来确认批处理是否以管理员身份运行。代码如下:
-
C/C++ code
-
@echo off title BAT setlocal EnableDELAYEDEXPANSION Rem 设置标志变量 set UAC = 0 Rem 获取tasklist命令输出 For / f " usebackq delims== " %% i In (`tasklist / fi " WINDOWTITLE eq 管理员: BAT " `) Do ( set " cmdline=%%i " set " cmdline=!cmdline:~0,7! " if " !cmdline! " == " cmd.exe " ( set UAC = 1 ) ) if " %UAC% " == " 1 " ( echo 正在以管理员身份运行当前批处理 ) else ( echo 没有以管理员身份运行当前批处理 ) :End pause exit