笔者近日需要为公司开发的一个服务程序写一个安装和卸载的脚本,安装服务和卸载服务都很简单, 但想要自动以管理员权限运行,并且能判断服务是否已经安装.
通过百度,参考了别人一些代码,主要是获取管理员权限的代码copy了, 加上自己的尝试,最终的脚本完成了预想的功能.
现在将正确的代码附上,仅供参考.
1 @echo off 2 title GetAdministratorPower 3 mode con cols=100 lines=20 4 color 3f 5 6 :: 开始获取管理员权限 7 setlocal 8 set uac=~uac_permission_tmp_%random% 9 md "%SystemRoot%\system32\%uac%" 2>nul 10 if %errorlevel%==0 ( rd "%SystemRoot%\system32\%uac%" >nul 2>nul ) else ( 11 echo set uac = CreateObject^("Shell.Application"^)>"%temp%\%uac%.vbs" 12 echo uac.ShellExecute "%~s0","","","runas",1 >>"%temp%\%uac%.vbs" 13 echo WScript.Quit >>"%temp%\%uac%.vbs" 14 "%temp%\%uac%.vbs" /f 15 del /f /q "%temp%\%uac%.vbs" & exit ) 16 endlocal 17 :: 完成获取,下面可以开始写你自己的代码了 18 19 20 echo "install MyService" 21 22 @echo off 23 sc query MyService |findstr /i "STATE">nul 24 :: 如果服务已安装,跳转至exist标签;如果未安装,跳转至notexist标签 25 if not errorlevel 1 (goto exist) else goto notexist 26 27 :notexist 28 echo "MyService is NOT installed, INSTALLING..." 29 "%~dp0MyService.exe" -i 30 sc start MyService 31 goto end 32 33 :exist 34 echo "MyService is Installed, checking..." 35 sc query |find /i "MyService" >nul 2>nul 36 :: 如果服务已启动,跳转至end标签;如果未启动,跳转至stopped标签 37 if not errorlevel 1 (goto end) else goto stoppped 38 39 :stoppped 40 echo "MyService is NOT started, STARTING..." 41 sc start MyService 42 goto end 43 44 :end 45 echo "install finished!"
此脚本已经在winxp, win7 32位和win7 64位上测试过, 其他环境尚未测试.