2012-05-23 18 views
13

मैंने निम्न आदेश चलाकर एक विंडोज़ सेवा के रूप में एक मानक निष्पादन योग्य जार फ़ाइल स्थापित की:// टीएस मोड में प्रोक्रुन कार्यों के साथ स्थापित विंडोज सेवा, लेकिन विंडोज सेवा के रूप में शुरू नहीं होती है, यह कहकर "शुरू हुई और फिर रुक गई"

> 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 

मैं अब निम्न आदेश (मैं जावा 1.6 का उपयोग कर रहा) चलाकर कंसोल मोड में मेरा कार्यक्रम ठीक चला सकते हैं:

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

जब मैं मानक Windows सेवाओं इंटरफेस के माध्यम से सेवा प्रारंभ करने का प्रयास , मुझे निम्न त्रुटि संदेश मिलता है:

स्थानीय कंप्यूटर पर MyService सेवा शुरू हुई और फिर बंद कर दी गई। कुछ सेवाएं स्वचालित रूप से बंद हो जाती हैं अगर वे अन्य सेवाओं या कार्यक्रमों द्वारा उपयोग में नहीं हैं।

जब मैं इस तरह से सेवा शुरू करने का प्रयास करता हूं तो मेरे एप्लिकेशन की लॉग फ़ाइल में कोई आउटपुट नहीं होता है। विंडो के इवेंट लॉग में कोई आउटपुट नहीं है (विंडोज 7 64-बिट)। यह सेवा करने और समझने के लिए मैं क्या कर सकता हूं कि यह सेवा क्यों नहीं चली जाएगी?

+0

क्या आप सेवा को 'स्थानीय उपयोगकर्ता' या व्यवस्थापक उपयोगकर्ता के रूप में चला रहे हैं? – checketts

+0

यह अन्य सेवाओं के लिए उपयोग किए जाने वाले डिफ़ॉल्ट "स्थानीय सिस्टम खाते" पर सेट है। मैंने अन्य खातों का कोई फायदा नहीं लिया है। – 11101101b

उत्तर

5

सेवा नाम में किसी भी सफेद-स्थान का उपयोग न करें!

परीक्षण और अलग खींच बिलाव और डुप्लिकेट यह बूटस्ट्रैप प्रक्रिया, मेरी समस्या के लिए फिक्स किया जा रहा है कि अपाचे कॉमन्स Daemon (Procrun) ठीक से काम नहीं करता है जब वहाँ के नाम पर सफेद-अंतरिक्ष समाप्त हो गया है के कई घंटे के बाद विंडोज सेवा

सेवा नाम में रिक्त स्थान होने पर यह विंडोज के साथ एक सेवा को सही ढंग से स्थापित और पंजीकृत करता है। विंडोज रजिस्ट्री प्रविष्टियां भी सही दिखती हैं। यह सेवा डीबग (उर्फ टीएस या कंसोल) मोड में भी ठीक है। हालांकि, जब Windows द्वारा लॉन्च की गई एक वास्तविक सेवा के रूप में चलाया जाता है तो यह सेवा विफलता में सेवा-स्थान पर एक सफेद-स्थान के साथ स्थापित किया गया था।

मुझे यकीन है कि जब यह विफल हो जाए तो Procrun के पास कुछ प्रकार का लॉग आउटपुट था! अच्छा लॉगिंग इस तरह के स्नैप जैसे डीबगिंग मुद्दों को बना सकता है।

मैं अपने सेवा नाम में कई शब्दों की जरूरत थी, तो मैं एक शब्द के साथ मेरी सेवा नामित और "DisplayName" पैरामीटर के साथ नाम बदल दिया है:

> 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' क्या कहा। (यह मेरी पहली पोस्ट है, इसलिए कोमल हो कृपया!)

मैं बदलकर सेवा नाम में रिक्त स्थान के साथ सही ढंग से स्थापित करने के लिए सेवा प्राप्त करने में सक्षम था // है // MyService बजाय करने के लिए अपने आदेश का हिस्सा निम्नलिखित हो, जो मुझे संदेह है कि उसने क्या किया। (अगर मैं गलत तरीके से मान रहा हूं तो मैं क्षमा चाहता हूं।) ध्यान दें कि उद्घाटन डबल कोट सेवा नाम की शुरुआत की बजाय स्ट्रिंग की शुरुआत में है।

के रूप में उसके लिए मामला है, सेवा सही ढंग से स्थापित किया गया था और सही देखा है, लेकिन यह शुरू नहीं होगी "// // मेरी सेवा है"। मैं रजिस्ट्री में सेवा की छविपैथ मान डेटा सेटिंग को बदलकर // आरएस // मेरी सेवा कमांड के हिस्से में समान परिवर्तन करने के लिए इसे प्राप्त करने में सक्षम था।

"// रुपये // मेरी सेवा"

सब कुछ बिना किसी समस्या के काम कर रहा है: इसलिए, रजिस्ट्री मान के बजाय अपने डेटा की स्थापना में निम्नलिखित था।

+0

फॉलो-अप @ सुज़ेन के लिए धन्यवाद जो उपयोगी हो सकता है। – 11101101b

1

यह सर्वर सेवा से पूरा होने के कारण शुरू होता है और बंद हो जाता है, इसलिए यह स्वचालित रूप से बंद हो जाएगा। यदि आपके पास लंबे समय तक चलने का तर्क है तो यह रुक जाएगा नहीं।