差異處
這裏顯示兩個版本的差異處。
下次修改 | 前次修改 | ||
windowsbatch:control_service [2013/09/13 23:54] tony 建立 |
windowsbatch:control_service [2023/06/25 09:48] (目前版本) |
||
---|---|---|---|
行 1: | 行 1: | ||
+ | {{tag>WindowsBatch}} | ||
====== 管理系統服務 ====== | ====== 管理系統服務 ====== | ||
+ | ===== Normal Operation ===== | ||
+ | <code bash> | ||
+ | REM 停止服務 | ||
+ | sc stop %SERVICE% | ||
+ | REM 啟動服務 | ||
+ | sc start %SERVICE% | ||
+ | REM 查詢服務 | ||
+ | sc query %SERVICE% | ||
+ | </code> | ||
+ | ===== Kernel Service ===== | ||
+ | ==== Create ==== | ||
+ | 腳本接受兩個參數:(1)服務名稱;(2)驅動程式完整路徑。流程就是針對輸入參數做檢查,接著確認是否為已加服務,已加就不做,沒加就做。而透過sc query確認服務是否存在的方法,原先確認服務是否存在是透過%errorlevel%是否為1060,但在XP與2003上抓不到正確的%errorlevel%,因此改透過確認服務名稱字串的方式做判斷。另外有特別處理的部分是Driver的路徑,因為有可能路徑包含空格,而造成User在傳入參數時加上雙引號。為了避免判斷或建立服務時不好處理,在一開始就做了字串取代把雙引號給變成空字串。 | ||
+ | <file bash installDriver.bat> | ||
+ | @echo off | ||
+ | set SERVICE=%1 | ||
+ | set BINPATH=%2 | ||
+ | set BINPATH=%BINPATH:"=% | ||
+ | if "%SERVICE%" == "" ( | ||
+ | echo Please enter the service name. | ||
+ | exit /b 2 | ||
+ | ) | ||
+ | if "%BINPATH%" == "" ( | ||
+ | echo Please enter the driver path. | ||
+ | exit /b 2 | ||
+ | ) | ||
+ | |||
+ | if not exist "%BINPATH%" ( | ||
+ | echo Driver path[%BINPATH%] is incorrect! | ||
+ | exit /b 2 | ||
+ | ) | ||
+ | |||
+ | sc query %SERVICE% | findstr %SERVICE% > NUL | ||
+ | if errorlevel 1 ( | ||
+ | sc create %SERVICE% binPath= "%BINPATH%" type= kernel start= auto error= normal | ||
+ | ) else ( | ||
+ | echo Service [%SERVICE%] exists! | ||
+ | ) | ||
+ | |||
+ | exit /b %errorlevel% | ||
+ | </file> | ||
+ | 使用範例: | ||
+ | <code bash> | ||
+ | installDriver.bat mydriver "D:\Workspace\MyDriver\release\mydriver.sys" | ||
+ | installDriver.bat mydriver D:\Workspace\MyDriver\release\mydriver.sys | ||
+ | installDriver.bat mydriver "D:\Java Workspace\MyDriver\release\mydriver.sys" | ||
+ | </code> | ||
+ | ==== Delete ==== | ||
+ | 腳本接受一個參數: 服務名稱。流程就是參數檢查,確認服務是否存在去決定是否執行刪除指令。 | ||
+ | <file bash uninstallDriver.bat> | ||
+ | @echo off | ||
+ | set SERVICE=%1 | ||
+ | |||
+ | if "%SERVICE%" == "" ( | ||
+ | echo Please enter the service name. | ||
+ | exit /b 2 | ||
+ | ) | ||
+ | |||
+ | sc query %SERVICE% | findstr %SERVICE% > NUL | ||
+ | if errorlevel 1 ( | ||
+ | echo Service [%SERVICE%] doesn't exist. | ||
+ | ) else ( | ||
+ | sc stop %SERVICE% | ||
+ | sc delete %SERVICE% | ||
+ | ) | ||
+ | |||
+ | exit /b %errorlevel% | ||
+ | </file> | ||
+ | 使用範例: | ||
+ | <code bash> | ||
+ | uninstallDriver.bat mydriver | ||
+ | </code> | ||
===== Reference ===== | ===== Reference ===== | ||
* [[http://stackoverflow.com/questions/9445223/how-to-check-in-windows-xp-if-the-service-is-not-installed-using-batch-file|在XP如何檢查Service是否存在?]] (因為無法透過sc query %service%的errorlevel得知) | * [[http://stackoverflow.com/questions/9445223/how-to-check-in-windows-xp-if-the-service-is-not-installed-using-batch-file|在XP如何檢查Service是否存在?]] (因為無法透過sc query %service%的errorlevel得知) | ||
+ | ===== ===== | ||
+ | ---- | ||
+ | \\ | ||
+ | ~~DISQUS~~ |