管理系統服務

REM 停止服務
sc stop %SERVICE%
REM 啟動服務
sc start %SERVICE%
REM 查詢服務
sc query %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