筆者近日需要為公司開發的一個服務程序寫一個安裝和卸載的腳本,安裝服務和卸載服務都很簡單, 但想要自動以管理員權限運行,並且能判斷服務是否已經安裝.
通過百度,參考了別人一些代碼,主要是獲取管理員權限的代碼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位上測試過, 其他環境尚未測試.