要把應(yīng)用程序添加為服務(wù),你需要兩個(gè)小軟件:Instsrv.exe和Srvany.exe。Instsrv.exe可以給系統(tǒng)安裝和刪除服務(wù),Srvany.exe可以讓程序以服務(wù)的方式運(yùn)行。這兩個(gè)軟件都包含在Windows NT Resource Kit里,如果你沒有,也可以在本站下載 instsrv.exe和 srvany.exe。
srvany.exe可用于將任何EXE程序作為Windows服務(wù)運(yùn)行。也就是說srvany只是其注冊(cè)程序的服務(wù)外殼,這個(gè)特性對(duì)于我們來說非常實(shí)用,我們可以通過它讓我們的程序以SYSTEM賬戶啟動(dòng),或者實(shí)現(xiàn)隨機(jī)器啟動(dòng)而自啟動(dòng),也可以隱藏不必要的窗口,比如說控制臺(tái)窗口等等。
如何使用:
當(dāng)你獲取到srvany后并決定將某程序作為服務(wù)啟動(dòng)后,請(qǐng)先將srvany安裝為系統(tǒng)服務(wù),具體的安裝方法有很多,這里使用instsrv,語法如下:
安裝 instsrv ServiceName C:\Windows\System32\srvany.exe 卸載 instsrv ServiceName remove
(ServiceName 即你自己定義的服務(wù)名稱,可以是要作為系統(tǒng)服務(wù)啟動(dòng)的應(yīng)用程序的名稱。)
安裝完畢后,我們需要對(duì)srvany.exe進(jìn)行配置,以便于能夠加載我們指定的程序,配置的方法是,開始 - 運(yùn)行 - regedit,打開注冊(cè)表,定位到下面的路徑。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ServiceName
如果該服務(wù)名下沒有Parameters項(xiàng)目,則對(duì)服務(wù)名稱項(xiàng)目右擊新建項(xiàng),名稱為Parameters,然后定位到Parameters項(xiàng),新建以下幾個(gè)字符串值。
名稱 Application 值為你要作為服務(wù)運(yùn)行的程序地址。
名稱 AppDirectory 值為你要作為服務(wù)運(yùn)行的程序所在文件夾路徑。
名稱 AppParameters 值為你要作為服務(wù)運(yùn)行的程序啟動(dòng)所需要的參數(shù)。
比如這里是個(gè)配置實(shí)例,我們這里配置的服務(wù)名稱是NGINX,其余是nginx的安裝配置情況。
導(dǎo)入注冊(cè)表的方法:
當(dāng)然還有一個(gè)比較簡單的做法,那就是將下面的文本保存為*.reg文件,然后雙擊導(dǎo)入注冊(cè)表。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\服務(wù)名稱\Parameters]
"Application"="值為你要作為服務(wù)運(yùn)行的程序地址"
"AppDirectory"="值為你要作為服務(wù)運(yùn)行的程序所在文件夾路徑"
"AppParameters"="值為你要作為服務(wù)運(yùn)行的程序啟動(dòng)所需要的參數(shù)"
至此,MyService已經(jīng)安裝成windows服務(wù)了,在Window服務(wù)項(xiàng)中即可查看。
批處理說明:
1. run-install.bat 封裝了安裝服務(wù)的操作(上面有提到)。需要傳入?yún)?shù)有服務(wù)名稱,程序名稱。
@echo off
rem 參數(shù)依次為 服務(wù)名稱 可執(zhí)行文件名稱
@echo 服務(wù)名稱:%1
@echo 程序名稱:%2
rem 定義需要運(yùn)行的程序路徑
set curExe=%~dp0%2
rem 定義注冊(cè)表路徑
set regpath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\Parameters\
rem 定義srvany.exe文件路徑
set sourcePath=%~dp0srvany.exe
rem 進(jìn)入當(dāng)前目錄
cd /d "%~dp0"
rem 安裝引導(dǎo)服務(wù)
instsrv %1 "%sourcePath%"
@echo 服務(wù)添加完成
rem 添加注冊(cè)表語法: reg add 注冊(cè)表路徑 /v 項(xiàng)名稱 /t 值類型 /d 數(shù)據(jù) /f 表示強(qiáng)行修改不提示
rem 名稱 Application 值為你要作為服務(wù)運(yùn)行的程序地址 /d對(duì)應(yīng)的參數(shù)有斜杠不是為了轉(zhuǎn)義引號(hào),而是路徑還有斜杠,默認(rèn)將引號(hào)轉(zhuǎn)義了,額外添加斜杠是為了保留引號(hào)
reg add %regpath% /v AppDirectory /t REG_SZ /d "%~dp0\" /f
rem 名稱 AppDirectory 值為你要作為服務(wù)運(yùn)行的程序所在文件夾路徑
reg add %regpath% /v Application /t REG_SZ /d "%curExe%" /f
rem 名稱 AppParameters 值為你要作為服務(wù)運(yùn)行的程序啟動(dòng)所需要的參數(shù)
reg add %regpath% /v AppParameters /t REG_SZ /f
@echo 注冊(cè)表添加完成
2.install.bat 命令含義:進(jìn)入當(dāng)前目錄,調(diào)用當(dāng)前目錄下的run-install.bat文件,并傳入?yún)?shù),完成服務(wù)安裝。服務(wù)名:MyService 執(zhí)行程序:Console.exe
@echo off
cd /d %~dp0
call run-install.bat MyService Console.exe
pause
3.run-del.bat 簡單封裝了卸載服務(wù)的操作,傳入服務(wù)名稱即可。
@echo off
rem 參數(shù)依次為 服務(wù)名稱
@echo 服務(wù)名稱:%1
rem 進(jìn)入當(dāng)前目錄
cd /d %~dp0
rem 卸載引導(dǎo)服務(wù)
instsrv %1 remove
4.del.bat 命令含義:進(jìn)入當(dāng)前目錄,調(diào)用當(dāng)前目錄下的run-del.bat文件,并傳入?yún)?shù),完成服務(wù)卸載。服務(wù)名:MyService
@echo off
cd /d %~dp0
call run-del.bat MyService
pause