Re: java可以用來寫 windows常駐程式或服務嗎?

看板java作者時間23年前 (2000/12/20 02:21), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
※ 引述《chicken.bbs@cis.nctu.edu.tw (無敵噴飯雞)》之銘言: : ==> 在 yoyochen.bbs@bbs.cs.nthu.edu.tw (山豬) 的文章中提到: : > 如果是在NT/2000的話,我想最快的方法就是用resource kit裡的srvany : > 它可以把.exe裝成service : > 就把你的命令列(java -cp <classpath> <classname>)設到srvany裡就可以了 : 這樣的 services 只能 start or stop... : 如果要真的寫成 windows service, 那用 M$ 牌的 JavaVM, 可以 : 做的到... 記得 com.ms.xxx 某個 package 裡.. 你的 ap 只要去 : implements 裡面的 interface, 就是個標準的 windows services : 了.. : 但是這樣用,唯一賺到的地方就是你不必去用 c++ 等等寫 services.. : java 其它優點, 跨平台.. etc 全沒了. 如果真的需要用 Java 來寫 NT 的 Service, 這是一個蠻方便的方式.. (不過就被綁在 NT 跟 MSJavaVM 上..) (至於是否有額外的優點, 下面這個小範例會提到.. :) 要使用 import com.ms.service.*; 來寫一個 NT 的 Service 非常簡單, 不太要求的話, 下面這樣的程式就可以了: import java.io.*; import java.util.*; import com.ms.service.*; public class ServiceMain extends Service { public ServiceMain(String[] args) throws Exception { CheckPoint(1000); setRunning(ACCEPT_SHUTDOWN | ACCEPT_STOP); /** * 這裡還可以幫你做 Console 輸出導向工作喔! */ setServiceAutoDumpOut(false); PrintStream ps = new PrintStream(new FileOutputStream("ColaService.log")); System.setOut(ps); /** * 在這裡呼叫你的 Service. 可以把 args 直接傳給你程式的 Main. */ } protected boolean handleStop () { /** * 這裡可以還 handle 當此 Service 被 Stop 時要做什麼事情. */ setStopping(5000); return true; } protected boolean handleShutdown () { /** * 連關機都可以 handle 喔! */ return handleStop(); } } 然後查一下 jntsvc 這個程式的使用方法: jntsvc /OUT:SERVICE.EXE /svcmain:ServiceMain /CLASSPATH:嘿嘿嘿.EXE "/SERVICENAME:嘿嘿嘿" "/DISPLAYNAME:嘿嘿嘿服務" "/EVENTSOURCE:嘿嘿嘿" ServiceMain.class 可以看到 EVENTSOURCE 這個參數, 這裡還能幫你導向你的 Console Message 到 Windows NT/2000 的 Event 喔! (使用這個功能就必須要小心丟出去的東西, 要不然三兩下就塞爆了..) 而且, 我們只要把這個程式跟服務本身分離開, 就可以讓使用者在 NT + MSJavaVM 平台使用這樣的功能, 如果是其他平台的使用者, 還是可以使用平常的啟動方式! -- Copyright from C.....S!! :p -- ※ Origin: 鳥窩 (BirdNest.infoX.Net) ◆ From: pyrethrum.cs.nthu.edu.tw

01/01 21:36, , 1F
01/01 21:36, 1F
文章代碼(AID): #wFwSK00 (java)
文章代碼(AID): #wFwSK00 (java)