2012-05-23 18 views
13

我通過運行以下命令將標準可執行jar文件作爲Windows服務安裝:與Procrun一起安裝的Windows服務以// TS模式運行,但並未作爲Windows服務啓動,稱其「啓動然後停止」

> prunsrv.exe //IS//"My Service" --Install="C:\path-to-prunsrv.exe" --Jvm=auto \ 
    --Startup=auto --StartMode=jvm --Classpath="C:\path-to-MyService.jar" \ 
    --StartClass=com.mydomain.MyService 

我現在可以通過運行下面的命令(我使用的Java 1.6)運行在控制檯模式下我的程序罰款:

> prunsrv.exe //TS//"My Service" 

當我試圖通過標準的Windows服務接口來啓動服務,我收到以下錯誤消息:

本地計算機上的MyService服務已啓動,然後停止。某些服務如果未被其他服務或程序使用,則會自動停止。

當我嘗試以這種方式啓動服務時,我的應用程序的日誌文件中沒有輸出。 Window的事件日誌中也沒有輸出(Windows 7 64位)。我能做些什麼來嘗試弄清楚爲什麼這項服務無法運行?

+0

您是以「本地用戶」身份還是作爲管理員用戶運行服務? – checketts

+0

它被設置爲用於其他服務的默認「本地系統帳戶」。我嘗試過其他帳戶無濟於事。 – 11101101b

回答

5

請勿在服務名稱中使用任何空格!

經過許多小時的測試並將Tomcat拆分並複製它的引導過程後,對於我的問題的修復最終導致Apache Commons Daemon(Procrun)無法正常工作,當名稱中有空格時Windows服務。

當服務名稱中有空格時,它貌似正確地安裝並註冊了Windows服務。 Windows註冊表項甚至看起來正確。該服務甚至可以在調試(又名TS或控制檯)模式下運行。但是,在運行時,作爲Windows啓動的實際服務,如果服務在服務名稱中使用了空格,則會失敗。

我當然希望Procrun在失敗時有某種類型的日誌輸出!良好的日誌記錄可以使調試問題如此簡單。

我需要在我的服務名稱多的話,所以我叫我的服務用一個詞,並與「顯示名稱」參數更改了名字:

> prunsrv.exe //IS//MyService --Install="C:\path-to-prunsrv.exe" --Jvm=auto \ 
    --Startup=auto --StartMode=jvm --Classpath="C:\path-to-MyService.jar" \ 
    --StartClass=com.mydomain.MyService --DisplayName="My Service" 
2

我想給有關一些額外的信息上面說了什麼'11101101b'。 (這是我的第一篇文章,所以請溫和!)

我能夠得到的服務正確安裝與服務名稱中的空格,通過改變// IS // MyService他的命令的一部分是以下,我懷疑他也是這樣做的。 (如果我錯誤地假設,我很抱歉。)請注意,打開的雙引號位於字符串的開頭,而不是服務名稱的開頭。

「// // IS我的服務」

至於對他的情況下,正確安裝服務,看着正確的,但它不會啓動。通過更改註冊表中服務的ImagePath值數據設置,我能夠解決該問題,以便對命令的// RS //我的服務部分進行相同的更改。因此,註冊表值,而不是不得不在其數據設置如下:

「// // RS我的服務」

一切似乎是工作沒有任何問題。

+0

感謝您的後續@Suzanne這可能會有用。 – 11101101b

1

此服務器啓動和停止是因爲服務完成任務,因此它會自動停止。如果你有一個長時間運行的邏輯,它不會停止。

相關問題