2011-06-03 27 views
7

के रूप में एक सी # कंसोल एप्लिकेशन चलाना मेरे पास एक मूल सी # कंसोल एप्लिकेशन है जिसे मैं विंडोज सेवा के रूप में चलाने के लिए चाहता हूं।विंडोज सेवा

मैंने sc create का उपयोग कर विंडोज सेवा बनाई है। यह ठीक काम करता है, और मैं services.msc के तहत अपनी सेवा देख सकता हूं। जब मैं कोशिश करते हैं और इस सेवा मैं निम्नलिखित त्रुटि मिलती है शुरू:

Could not start the PROJECT service on Local Computer. Error 1053: The service did not respond to the start or control request in a timely fashion.`

मैंने पढ़ा है कि इस सेवा के कोड को निष्पादित करने से अधिक समय तक 30000   एमएस लेने की वजह से हो सकता है। इसलिए मैंने कोड का बड़ा हिस्सा हटा दिया ताकि शायद ही कुछ भी निष्पादित किया जा रहा हो .. फिर भी वही त्रुटि बनी रहती है।

मैं इस परियोजना के लिए .NET 3.5 का उपयोग कर रहा हूं।

इसका कारण क्या होगा?

+0

क्या आपकी प्रक्रिया वास्तव में शुरू हुई थी? मुझे संदेह है कि यह शुरू करने में असफल रहा है, – zdan

+0

http://stackoverflow.com/questions/593454/easiest-language-for-creating-a-windows-service/593803#593803 –

उत्तर

9

आप किसी भी कंसोल एप्लिकेशन को नहीं ले सकते और विंडोज सेवा के रूप में नहीं चल सकते हैं। सबसे पहले आपको अपनी सेवा कक्षा को लागू करने की आवश्यकता है जो ServiceBase से प्राप्त होगा, फिर प्रवेश बिंदु (Main) में आपको ServiceBase.Run(new YourService()) के साथ सेवा चलाने की आवश्यकता है। आपकी सेवा कक्षा में आपको यह निर्धारित करने की आवश्यकता है कि सेवा शुरू होने और समाप्त होने पर क्या होता है।

आदर्श रूप से आपको अपनी असेंबली में ServiceInstaller भी जोड़ना चाहिए। इस तरह आप अपनी सेवा गुणों को पूर्व निर्धारित करने में सक्षम होंगे, और सेवा स्थापित करने के लिए installutil.exe का उपयोग करेंगे।

+0

ऐसा क्यों है? – wulfgarpro

+1

@WulfgarPro - क्योंकि विंडोज़ सेवा अनुप्रयोग में थोड़ा अलग वास्तुकला है। सेवा शुरू होने और समाप्त होने पर आपको क्या करना है, इसे परिभाषित करने की आवश्यकता है। –

+2

ऐसे टूल हैं जो आपको बिना किसी संशोधन के सेवा के रूप में कंसोल एप्लिकेशन चलाने देंगे। उदाहरण के लिए यह एक: http://runasservice.com –

0

मुझे नहीं पता कि "एससी बनाने" क्या है। लेकिन मुझे पता है, विजुअल स्टूडियो 2010 का उपयोग करके, कोई एक विंडोज सेवा प्रोजेक्ट बना सकता है। वैसे, मैंने इस तरह की एक परियोजना बनाई है और यह सभी तरह से अच्छी तरह से काम करता है।

+0

'sc create' यह है कि आप विंडोज़ सेवा कैसे स्थापित कर सकते हैं, भले ही आपके पास असेंबली के अंदर इंस्टॉलर न हो। –

0

किसी भी पुराने एप्लिकेशन को सेवा के रूप में नहीं चलाया जा सकता है, खासकर विंडोज के हाल के संस्करणों के तहत। उन्हें कुछ कार्यक्षमताओं का समर्थन करने, कुछ अनुरोधों का जवाब देने, और (फिर से, विंडोज के हाल के संस्करणों के तहत) उपयोगकर्ता के साथ सीधे संपर्क करने की उम्मीद है।

यदि आप एक सेवा चाहते हैं, तो विशेष रूप से एक सेवा के लिए डिज़ाइन किया गया एक एप्लिकेशन लिखें।

0

why is this so? – wulfgar.pro Jun 3 '11 at 1:13

@WulfgarPro - because windows service application has a little different architecture. You need to define what to do when service starts and ends. – Alex Aza Jun 3 '11 at 1:15

(दुर्भाग्य से मैं एक टिप्पणी अभी तक नहीं लिख सकते हैं।) यह इसलिए क्योंकि एससीएम (सेवा नियंत्रण प्रबंधक) सेवा गर्त ServiceBase कक्षा नियंत्रित करता है। अगर किसी को केवल यह परिभाषित करने की आवश्यकता होती है कि जब यह शुरू होता है और बंद हो जाता है तो उसे विरासत और ओवरराइडिंग की आवश्यकता नहीं होगी। कोई बस उन दो तरीकों को बना सकता है। दुर्भाग्यवश इसमें कुछ और काम शामिल है क्योंकि सर्विसबेस में थोड़ा अधिक कार्यक्षमता है।

0

मुझे TopShelf के साथ बड़ी सफलता मिली है। यह एक nuget पैकेज है जो आपके .NET कंसोल ऐप को आवश्यक Windows सेवा हुक भी प्रदान करता है जैसे कि यह खुशी से कंसोल ऐप (डिबगिंग के लिए उपयोगी) के रूप में चलाया जा सकता है, या विंडोज सेवा के रूप में स्थापित किया जा सकता है।