1、可以自啟動,不需要交互啟動。這對于服務器來說是一個重要的特征。當然,你可以決定服務是否自啟動,甚至可以屏蔽某個服務。 2、NT服務沒有用戶界面,基本上類似一個DOS 程序,因為NT服務必須長時間運行,所以不想普通win32進程一樣有自己的界面。但是NT服務可以同用戶有界面交互,這是一類非凡的服務進程。可以通過NT的任務治理器來看到服務進程。 3、NT服務通過SCM(Services Control Manager)接口來治理,安裝、啟動、停止、撤除等都需要SCM的接口功能來進行。控制面板的服務控制器就是利用SCM接口來治理系統中的所有服務的。實際上,還有一些可以控制服務的程序或者命令,有net.exe 、服務器治理器等 、SCM.exe等。 4、這些進程都以一定的身份運行,以方便進行服務器資源的存取。一般情況下使用域中的LocalSystem賬號運行,此賬號對本機上的大多數資源(除非非凡禁止)有完全的存取權限,這樣可以保證服務程序的“強大”。但是,也有些服務采用非凡的賬號運行,你也可以非凡設定一個服務的帳號。 5、由系統自動以線程方式運行,一般情況下不過多占用系統資源,這同普通的進程有所區別,假如不采用線程方式,一般進程往往消耗整個CPU資源。一般需要時時存在,又不能過多消耗資源的任務以服務來實現最合適。
二、Java編寫服務的預備
1、作為本地化的實現,實現NT服務的Java程序當然不是100%純Java,單靠標準類庫是無法實現我們的編寫NT服務的目的,所以MS提供了一套SDK for Java(本文采用的是Microsoft SDK for Java 4.0),提到了如何利用MS提供的擴展類庫和相應的工具,實現符合Windows平臺需要的程序。其中包括了實現NT服務的所需要的類庫API框架以及將Java編譯的class文件組裝成標準的NT服務程序的工具。SDK的下載路徑可以從www.microsoft.com/java/查找到。
3、在該目錄下還有一個jntsvc.exe文件,也就是Java NT Service的意思啦。她可以幫助您實現將按照SDK提供的框架實現的編譯后的class文件組裝成一個標準的NT服務可執行文件。JntSvc幫助我們在已經編譯好的.class文件基礎上設置了所有NT服務程序必須的特征,是很重要的工具,得到NT服務取決于如何有效利用她。為了我們能夠方便從任何其他目錄的控制臺窗口調用她,我們將JntSvc.exe所在的目錄全路徑加入path環境變量。這可以通過設置系統屬性的高級屬性頁當中進行環境變量的設定。
需要注重的是,這個exe文件的運行必須要有JVM存在,她實際上是通過解釋.class來實現服務提供的。假如需要另外的擴展包,可以通過在/Classpath參數指定另外的擴展包的位置。所以在安裝Java編寫得到的NT服務的機器上必須存在JVM。假如是擁有IE5.x那么不用操心這個問題,IE核心組件已經包括了JVM;但是假如是IE6版本,則需要到MS的網站上下載JVM。假如您講SDK for Java安裝在服務器上就更方便了。