检测是否以管理员运行bat的两种方法
我用的是win7系统, 因为不喜欢一些集成包所以一直是手工配置开发环境, 然后写一个web.bat来管理tomcat mysql apache psql等服务.
但是碰到一个问题就是需要重启某个服务, 比如mysql, 这是很费劲的, 因为我是以普通用户跑win7的而不是administrator, 之前的折中方案是写一个su.bat,用处是以admin身份启动cmd然后运行web.bat,但是总感觉还是不够方便,就想着能不能检测到不是管理员身份就以管理员运行自己呢
好了,直接贴代码吧。
第一种方法是检测title里是否管理员关键字,看图。
@echo off
setlocal EnableDELAYEDEXPANSION
set UAC=0
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" (
goto select
) else (
title 需要以管理员权限运行此程序,请输入管理员密码。
runas /user:administrator web.bat
exit
)
pause
因为是要写到web.bat内容的前面的,这个时候如果右键--管理员运行,会检测失败,于是抛弃,看第二种。第二种是尝试向系统盘的system32里写入文件,以成功和失败判断
@echo off
set TempFile_Name=%SystemRoot%\System32\BatTestUACin_SysRt%Random%.batemp
echo %TempFile_Name%
( echo "BAT Test UAC in Temp" >%TempFile_Name% ) 1>nul 2>nul
if exist %TempFile_Name% (
del %TempFile_Name% 1>nul 2>nul
goto select
) else (
cls
title 需要以管理员权限运行此程序,请输入管理员密码。
runas /user:administrator web.bat
exit
)
pause
参考文档:
http://tieba.baidu.com/f?kz=1173336012
http://topic.csdn.net/u/20110812/16/0127cc8e-06eb-41fd-92a7-751d72139807.html