通过bat脚本检测并安装windows服务程序


笔者近日需要为公司开发的一个服务程序写一个安装和卸载的脚本,安装服务和卸载服务都很简单, 但想要自动以管理员权限运行,并且能判断服务是否已经安装.

通过百度,参考了别人一些代码,主要是获取管理员权限的代码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位上测试过, 其他环境尚未测试.


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM