將任何應(yīng)用程序注冊成后臺服務(wù)程序,即:系統(tǒng)啟動后該程序可以自動啟動,并且在前臺不要出現(xiàn)運行窗口。
解決辦法:需要使用Windows提供的兩個工具instsrv.exe和srvany.exe。(Windows 2003資源工具包帶有)
- instsrv:把win32程序變成系統(tǒng)服務(wù)。
- srvany:將一個應(yīng)用程序注冊為一個服務(wù)。即注冊一個系統(tǒng)服務(wù),來啟動要運行的應(yīng)用程序。
基本用法:
- instsrv [服務(wù)名] [應(yīng)用程序絕對路徑] (增加服務(wù))
- instsrv [服務(wù)名] REMOVE (刪除服務(wù))
- instsrv [服務(wù)名] [srvany的絕對路徑]
一、應(yīng)用程序具有服務(wù)功能(能響應(yīng)服務(wù)控制臺的查詢請求)
使用instsrv.exe,指令格式:instsrv [服務(wù)名] [應(yīng)用程序路徑]
執(zhí)行完成后,在注冊表項“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\”中自動增加項[服務(wù)名],并在其下成功添加各個鍵值:
“DisplayName” =服務(wù)顯示名 (字符串值)
“Description” =服務(wù)描述 (字符串值)
“ImagePath” =應(yīng)用程序路徑 (可擴充字符串值)
“ObjectName” =”LocalSystem” (字符串值)
“Type” =10(16進制) (dword值)
“Start” =2(16進制) (dword值)
“ErrorControl” =1(16進制) (dword值)
如果不使用instsrv.exe,同樣可以在注冊表中手工添加實現(xiàn):在“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\”下新建一個項,項名為要顯示的服務(wù)名,并在其下新建以上各個鍵,填入鍵值。
這樣,一個服務(wù)就增加成功了,運行services.msc在服務(wù)管理器中可以看到,重啟電腦就會自動啟動服務(wù)。
二、應(yīng)用程序不具有服務(wù)功能(不能響應(yīng)服務(wù)控制臺的查詢請求)
并不是所有程序都適合做系統(tǒng)服務(wù),即便注冊成系統(tǒng)服務(wù)后也是無法啟動,這時就需要用到srvany.exe。
具體步驟如下:
- 注冊服務(wù): path\instsrv [服務(wù)名] path\srvany.exe (同樣第一種情況,把[應(yīng)用程序路徑]換為[srvany路徑]。)
- 運行regedit打開注冊表,進入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[服務(wù)名]
- 新建一個項,項名為Parameters,在項Parameters下新建如下建值:
- 右鍵-新建-字符串值A(chǔ)pplication,值數(shù)據(jù)填入[應(yīng)用程序絕對路徑],如:D:\RuijieSupport\MentoHUST\MentoHUST.exe
- 右鍵-新建-字符串值A(chǔ)ppDirectory,值數(shù)據(jù)填入[應(yīng)用程序工作目錄],如: D:\RuijieSupport\MentoHUST
- 運行services.msc打開服務(wù)管理,找到剛添加的服務(wù),在屬性-登錄中,勾選“允許服務(wù)與桌面交互”。
- 啟動服務(wù)。
說明:
- 執(zhí)行instsrv命令如果出現(xiàn)出錯提示:- The fully qualified path to the .EXE must be given。則說明需要寫完整的路徑,并最好用引號包含。如:C:\Program Files\Windows Resource Kits\Tools> instsrv MentoHUST “C:\Program Files\Windows Resource Kits\Tools\srvany.exe”
- 在Parameters里還可以添加很多鍵值:
AppDirectory 工作目錄
AppParameters 你的應(yīng)用程序的參數(shù)。
AppEnvironment 運行環(huán)境變量。
三、以上方法同樣可以采用inf文件實現(xiàn)。
inf文件格式:
增加一個服務(wù):
[Version]
Signature=”$WINDOWS NT$”
[DefaultInstall.Services]
AddService=MentoHUST,,My_AddService_Name
[My_AddService_Name]
DisplayName=MentoHUST Replace Ruijie
Description=銳捷替代
ServiceType=0×10
StartType=2
ErrorControl=0
ServiceBinary=%11%\MentoHUST.exe
刪除一個服務(wù):
[Version]
Signature=”$WINDOWS NT$”
[DefaultInstall.Services]
DelService=MentoHUST
增加服務(wù)的inf文件創(chuàng)建后,保存,并執(zhí)行命令:
rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 path\inf文件名
執(zhí)行完成后,同樣會看到:在注冊表中看到新增的服務(wù)項MentoHUST和鍵值,在服務(wù)管理器會看到新增的服務(wù)MentoHUST。
遇到不具有服務(wù)功能的應(yīng)用程序,還是要打開注冊表,接著上述操作,在創(chuàng)建的服務(wù)項下新建項Parameters,并添加鍵值。
說明:
- ServiceType 服務(wù)類型:0×10為獨立進程服務(wù),0×20為共享進程服務(wù)(比如svchost);
- StartType 啟動類型:0 系統(tǒng)引導(dǎo)時加載,1 OS初始化時加載,2 由SCM(服務(wù)控制管理器)自動啟動,3 手動啟動,4 禁用。(注意,0和1只能用于驅(qū)動程序)
- ErrorControl 錯誤控制:0 忽略,1 繼續(xù)并警告,2 切換到LastKnownGood的設(shè)置,3 藍屏。
- ServiceBinary 服務(wù)程序位置:%11%表示system32目錄,%10%表示系統(tǒng)目錄(WINNT或Windows),%12%為驅(qū)動目錄system32\drivers。也可以不用變量,直接使用全路徑。
- 服務(wù)名MentoHUST后面有兩個逗號,因為中間省略了一個不常用的參數(shù)flags。
- Description、ServiceType、StartType、ErrorControl四項是必須要有的,還有LoadOrderGroup、Dependencies等就不做詳述了。
使用inf文件的優(yōu)勢:
- 和用SC等工具一樣,inf文件的效果是即時起效的,而導(dǎo)入reg后必須重啟才有效。
- 導(dǎo)出一個系統(tǒng)自帶服務(wù)的注冊表項,如果數(shù)據(jù)類型是REG_EXPAND_SZ,會看到一堆16進制代碼,可讀性很差。手動導(dǎo)入注冊表以增加服務(wù)時,這樣定義ImagePath顯然很不方便,而用REG_SZ代替又會有些問題,比如不能用環(huán)境變量。用inf文件完全沒有這個問題,ServiceBinary(即ImagePath)自動成為REG_EXPAND_SZ。
- inf文件會自動為服務(wù)的注冊表項添加一個Security子鍵,使它看起來更像系統(tǒng)自帶的服務(wù)。
- AddService和DelService以及AddReg、DelReg可以同時且重復(fù)使用。即可以同時增加和刪除多個服務(wù)和注冊表項。
四、通過修改注冊表來添加服務(wù):
在注冊表編輯器,展開分支"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" ,在右側(cè)窗格中顯示的就是本機安裝的服務(wù)項。如果要新建服務(wù),只須點擊"編輯→新建→項" ,然后為此項命名,如"test";然后右擊該項,選擇"新建→字符串值"或"新建→Dword值"即可。添加一個服務(wù)項目具體需要添加的鍵值如下:
"DisplayName",字符串值,對應(yīng)服務(wù)名稱;
"Description",字符串值,對應(yīng)服務(wù)描述;
"ImagePath",字符串值,對應(yīng)該服務(wù)程序所在的路徑;
"ObjectName",字符串值,值為"LocalSystem",表示本地登錄;
"ErrorControl",Dword值,值為"1";
"Start",Dword值,值為2表示自動運行,值為3表示手動運行,值為4表示禁止;
"Type",Dword值,應(yīng)用程序?qū)?yīng)10,其它對應(yīng)20。
另外,還要在"test"項下新建一個"Enum"項。如果有些必須通過srvany來加載的還必須添加另外的Parameters子項在該項中提供詳細的要加為服務(wù)的程序所在的路徑。而上面的那個路徑就需要指到srvany所在的路徑。
附:Windows 2003資源工具包 下載地址
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&DisplayLang=en