Normal Operation
REM 停止服務 sc stop %SERVICE% REM 啟動服務 sc start %SERVICE% REM 查詢服務 sc query %SERVICE%
Kernel Service
Create
腳本接受兩個參數:(1)服務名稱;(2)驅動程式完整路徑。流程就是針對輸入參數做檢查,接著確認是否為已加服務,已加就不做,沒加就做。而透過sc query確認服務是否存在的方法,原先確認服務是否存在是透過%errorlevel%是否為1060,但在XP與2003上抓不到正確的%errorlevel%,因此改透過確認服務名稱字串的方式做判斷。另外有特別處理的部分是Driver的路徑,因為有可能路徑包含空格,而造成User在傳入參數時加上雙引號。為了避免判斷或建立服務時不好處理,在一開始就做了字串取代把雙引號給變成空字串。
@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%
使用範例:
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"
Delete
腳本接受一個參數: 服務名稱。流程就是參數檢查,確認服務是否存在去決定是否執行刪除指令。
@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%
使用範例:
uninstallDriver.bat mydriver
Reference
- 在XP如何檢查Service是否存在? (因為無法透過sc query %service%的errorlevel得知)
留言
張貼留言