差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

下次修改
前次修改
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~~