2008-09-10 15 views
28

मेरे पास एक मौजूदा जीयूआई एप्लीकेशन है जिसे सेवा के रूप में लागू किया जाना चाहिए था। असल में, मुझे विंडोज 2003 सर्वर पर दूरस्थ रूप से लॉग ऑन और ऑफ करने में सक्षम होना चाहिए और फिर भी इस प्रोग्राम को चलाना जारी रखें।मैं एक सेवा के रूप में एक विंडोज जीयूआई आवेदन कैसे चला सकता हूं?

क्या यह भी संभव है?

संपादित करें: यहां और परिशोधन ... मेरे पास स्रोत नहीं है, यह मेरा आवेदन नहीं है।

+0

यहां और परिशोधन ... मेरे पास स्रोत नहीं है, यह मेरा आवेदन नहीं है। – JeffV

+2

यह प्रोबम की तरह है कि सिस्टम प्रशासकों को हर दिन हल करना होता है, इसलिए सिस्टम व्यवस्थापक से पूछें। चूंकि आपके पास स्रोत नहीं है, यह प्रोग्रामिंग quesions नहीं है। –

उत्तर

4

आप इसे लपेट कर सकते हैं srvany में, हालांकि आप (के रूप में करने का विरोध किया LocalService या कुछ इस तरह)

0

आप स्रोत है यह एक वास्तविक उपयोगकर्ता खाता आवंटित करने के लिए आवश्यकता हो सकती है? कई मामलों में एक स्टैंड अकेले आवेदन और एक सेवा के बीच अंतर न्यूनतम हैं।

अधिकांश परिवर्तन सेवा प्रबंधक में कोड को ठीक से जोड़ने से संबंधित हैं। एक बार हो जाने पर, आपको पता चलेगा कि जो भी समस्याएं होती हैं वे आपके प्रोग्रामिंग का परिणाम हैं और कोई अन्य प्रोग्राम नहीं।

15

विंडोज सेवाओं में जीयूआई नहीं हो सकते हैं, इसलिए आपको या तो जीयूआई से छुटकारा पाना होगा या अपने आवेदन को दो टुकड़ों में अलग करना होगा - कोई यूआई वाली सेवा, और "नियंत्रक" एप्लिकेशन। यदि आपके पास स्रोत कोड है, तो गैर-जीयूआई कोड को किसी सेवा में परिवर्तित करना आसान है - विजुअल स्टूडियो में 'विंडोज सर्विस' प्रोजेक्ट प्रकार है जो आपके लिए रैपिंग का ख्याल रखता है, और एक सरल चलने वाला तरीका है जो आपको दिखाता है कि कैसे बनाना है एक तैनाती परियोजना जो स्थापना का ख्याल रखेगी।

यदि आप दूसरे मार्ग का चयन करते हैं और कुछ मूल जीयूआई कोड को नियंत्रक में डालने की आवश्यकता है, तो नियंत्रक और सेवा डब्ल्यूसीएफ, .NET Remoting या सादे सॉकेट कनेक्शन के माध्यम से संवाद कर सकती है जो आप स्वयं को परिभाषित करते हैं। यदि आप रीमोटिंग का उपयोग करते हैं, तो "चंकी" इंटरफ़ेस का उपयोग करना सुनिश्चित करें जो डेटा को यथासंभव कुछ विधि आमंत्रणों के साथ स्थानांतरित करता है - प्रत्येक कॉल में उचित ओवरहेड होता है।

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

+0

यही कारण है कि यह एक कठिन समस्या है। मेरे पास एक मौजूदा जीयूआई ऐप (संस स्रोत) है जिसे मुझे सेवा के रूप में चलाने की आवश्यकता है। – JeffV

+1

यह गलत है। विंडोज सेवाओं में जीयूआई हो सकते हैं। यह प्रिंटर सेवा का मामला है जो एक विंडो प्रदर्शित करने में सक्षम है। – labilbe

+2

@ लैबिलबे - विंडोज सेवाओं के लिए जीयूआई की प्रक्रियाओं को बढ़ाने के लिए यह निश्चित रूप से संभव है। यह हो सकता है कि प्रिंटर सेवा क्या कर रही हो। यह वही बात नहीं है क्योंकि सेवा प्रक्रिया में स्वयं जीयूआई है। यह भी सच है कि विंडोज ओएस के टुकड़े कभी-कभी ऐसी चीजें कर सकते हैं जिन्हें अन्यथा अनुमति नहीं है। – McKenzieG1

0

सबसे पहले मुझे यह पूछना होगा कि आपकी सेवा को उपयोगकर्ता इंटरफ़ेस की आवश्यकता क्यों है। सबसे अधिक संभावना यह नहीं है लेकिन आपको शायद उस ग्राहक की आवश्यकता है जो इस सेवा से डेटा प्राप्त करे। कारण सेवाओं में आमतौर पर जीयूआई नहीं होता है, उनके पास चलाने के लिए विंडो वातावरण नहीं हो सकता है। मशीन मशीन में लॉग इन किए गए उपयोगकर्ता के बिना शुरू और चला सकती है। इस मामले में सेवा जीयूआई के लिए कोई डेस्कटॉप नहीं होगा।

यह कहकर कि आप मार्क द्वारा सुझाए गए उपयोगकर्ता के रूप में चलाने के लिए सेवा पर गुण सेट कर सकते हैं। आप "सेवा के साथ बातचीत करने की अनुमति दें" सेवा के गुणों में भी निर्दिष्ट कर सकते हैं। केवल अगर आप जानते हैं कि कोई उपयोगकर्ता लॉग इन होगा।

0

किसी सेवा में कोई GUI नहीं होना चाहिए, क्योंकि इसे किसी उपयोगकर्ता से हस्तक्षेप की आवश्यकता के बिना चलाना चाहिए, और खोजने के साथ जुड़े सभी प्रकार की समस्याएं हैं और सही उपयोगकर्ताओं डेस्कटॉप के साथ संवाद।

चूंकि संभवतः यह पूछने का कारण एप्लिकेशन को दूरस्थ रूप से मॉनिटर करने में सक्षम होना है, ऐसा करने के तरीके में दो एप्लिकेशन होंगे। सेवा पक्ष (मूल रूप से एक कंसोल अनुप्रयोग के रूप में लिखा गया) और ग्राहक/निगरानी जीयूआई पक्ष। क्लाइंट/निगरानी अनुप्रयोग के साथ संवाद करने के लिए सेवा कुछ रिमोट कनेक्टिविटी का उपयोग करेगी (जब मैंने इसे नामित पाइप्स का इस्तेमाल किया था)। या तो दूसरे के बिना चलाने में सक्षम होना चाहिए, और निश्चित रूप से सेवा ग्राहक के साथ चलाने में सक्षम होना चाहिए।

6

क्या किसी ने किसी तीसरे पक्ष के उत्पाद का उपयोग किया है जैसे: Always Up?

मुझे जो चाहिए वह करने के लिए लगता है। मुझे आवश्यक लॉगिन/लॉगआउट चक्रों के माध्यम से चलने की क्षमता है। और यह अनदेखा करने की क्षमता है कि यह एक जीयूआई ऐप है और इसे वैसे भी चलाएं।

वे मैन्युअल रूप से exe में लिंक करना और WinMain या कुछ को कॉल करना होगा।

+0

मैंने हमेशा कोशिश की है लेकिन यह नहीं किया है ' कम से कम कमांड लाइन अनुप्रयोगों के लिए, बहुत कम काम नहीं करता - मैंने इस कंप्यूटर पर चल रहे एक प्रोग्राम को संदेश प्रदर्शित करने का प्रयास कर रहा है "के बारे में अधिसूचनाएं जारी रखी हैं। मैं इसके बजाए winsw का उपयोग कर रहा हूँ। – VitalyB

0

यदि आप कोई सेवा बनाते हैं तो क्या होता है। वह सेवा डेस्कटॉप के साथ संवाद करने के लिए कॉन्फ़िगर है। कुछ उपयोगकर्ता चलाने और स्वचालित शुरू करने के लिए इसे कॉन्फ़िगर करें। इस अन्य एप्लिकेशन पर सेवा CreateProcess से। मुझे लगता है कि यह सी # (सी/सी ++ का उपयोग करने की कोशिश करने के लिए जल्दी है, अगर मुझे याद है तो भी सेवा के लिए कोड का बहुत कुछ था)। क्या इससे काम हो जायेगा??

लेकिन!

मेरी पहली सोचा (वर्चुअल सर्वर, HyperV, VMware जैसी) एक सर्वर स्तरीय वर्चुअल होस्ट में एक आभासी कंप्यूटर बनाने के लिए किया जाएगा। वे वर्चुअल मशीन सेवा के रूप में चलेंगी (या जो भी हाइपर वी करता है)। वर्चुअल मशीन हमेशा चल रही होगी - लॉग इन करने और बाहर लॉग इन किए बिना।

खिड़कियों को यह आभासी कंप्यूटर स्वत: प्रवेश बनाएं (TweakUI इसे सेट करने से) और फिर बस स्टार्टअप फ़ोल्डर के लिए एक शॉर्टकट का उपयोग कर जीयूआई एप्लिकेशन लॉन्च। आप इसमें दूरस्थ डेस्कटॉप भी प्रोग्राम के जीयूआई का उपयोग कर सकते हैं (मैं शर्त लगाता हूं कि हमेशा ऐसा नहीं कर सकता)।

2

आप वास्तव में यह एक सेवा के रूप में चलाने के लिए या यदि आप बस जब आप कनेक्ट नहीं हैं, चल रहा है रहने के लिए यह आवश्यकता क्यों है की जरूरत है? यदि उत्तरार्द्ध, आप लॉगिंग के बजाय डिस्कनेक्ट कर सकते हैं और एप्लिकेशन चलना जारी रहेगा। शट डाउन चुनने के बाद विकल्प ड्रॉप डाउन सूची में होना चाहिए या आप tsdiscon.exe को कॉल कर सकते हैं।

0

आप ServiceMill का उपयोग इस आपरेशन को प्राप्त कर सकते हैं। मूल रूप से आप अपने सर्वर पर ServiceMill सर्वर स्थापित करते हैं। फिर अपनी निष्पादन योग्य फ़ाइल पर दाएं बटन पर क्लिक करें और "सर्विसमिल सेवा के रूप में स्थापित करें"। अगला आप कुछ चीजों को कॉन्फ़िगर करते हैं (उपयोगकर्ता/पासवर्ड, यदि आप डेस्कटॉप से ​​बातचीत करना चाहते हैं या यदि आप ui को छिपाना पसंद करते हैं ... और स्टार्ट मोड स्वचालित रूप से सेट करें)।

सक्रिय + सॉफ्टवेयर से एक और उपकरण एक समाधान हो सकता है, ServiceMill Exe Builder जो आपको कमांड लाइन से सेवाएं बनाने की अनुमति देता है और यह बढ़िया है यदि आप निरंतर एकीकरण सर्वर का उपयोग कर रहे हैं या यदि आप बिना किसी सेवा के अपने घटक को वितरित करने की योजना बना रहे हैं सेवा एकीकरण के बारे में सोचें (साथ ही यह रॉयल्टी मुक्त है)।

0

मैं winsw के साथ अच्छा अनुभव प्राप्त हुआ है। मैं अपनी बैच फ़ाइलों को आसानी से सेवाओं में परिवर्तित करने में सक्षम था।

मैं nginx के लिए यह प्रयोग किया है और साथ ही, this answer प्रति।

0

FireDaemonPro अधिकांश जीयूआई ऐप्स सेवाओं में बदल जाता है; यह मुफ़्त नहीं है, लेकिन यह प्राप्त करने लायक हो सकता है।