2010-05-07 17 views
18

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

  global::System.Windows.Forms.MessageBox.Show("A fatal error occurred. " + 
       ServiceName + " is now terminating."); 

लेकिन यह काम नहीं किया और केवल एक त्रुटि उत्पन्न की।

उत्तर

19

नहीं, आप किसी सेवा से संदेश बॉक्स नहीं दिखा सकते हैं। यदि आप त्रुटियों की रिपोर्ट करना चाहते हैं, तो ऐसा करने का मानक तरीका event log के साथ है।

अधिक "उन्नत" प्रकार के यूआई (केवल त्रुटि रिपोर्टिंग नहीं) के लिए, जिस तरह से यह आमतौर पर किया जाता है, वह नियमित विंडोज एप्लिकेशन के माध्यम से होता है जिसे आपने उपयोगकर्ता के स्टार्टअप फ़ोल्डर (या रजिस्ट्री में रन कुंजी) में रखा है और किसी प्रकार के आईपीसी तंत्र (.NET रिमोटिंग, डब्ल्यूसीएफ, नियमित सॉकेट, नामित पाइप इत्यादि) के माध्यम से सेवा से बात करता है।

+0

ओह .. मैं एक सामान्य अपवाद हैंडलर की उम्मीद कर रहा था जो सेवा के साथ त्रुटि होने पर उपयोगकर्ता को सूचित करेगा।कुछ मामलों में यह चुपचाप दुर्घटनाग्रस्त हो जाएगा और उपयोगकर्ताओं को पता नहीं होगा कि सेवा दुर्घटनाग्रस्त हो गई थी। – Jonn

+0

डीबग करने का प्रयास करते समय मैं हर समय संदेश बॉक्स का उपयोग करता हूं। यह पता लगाने का एक तेज़ और आसान तरीका है कि कौन से मुद्दे हो सकते हैं। रिलीज में कभी भी एक संदेश बॉक्स का उपयोग न करें! रिलीज के निर्माण के दौरान हमेशा ईवेंट लॉग का उपयोग करें! डीबग उद्देश्यों के लिए एक संदेश बॉक्स का उपयोग करने के लिए बस System.indows.Forms को अपनी परियोजना के संदर्भ में जोड़ें। –

+0

मैं उपयोगकर्ता को सूचित करना चाहता हूं कि मैं ईवेंट लॉगिंग नहीं कर सकता। लेकिन एकमात्र तरीका एक घटना लॉगिंग के माध्यम से है? वह अजीब है। – user922020

-2

नहीं आप नहीं कर सकते। विंडोज सेवाओं में कोई जीयूआई नहीं है। लेकिन आप एक छोटी सी प्रणाली ट्रे अधिसूचना दिखा सकते हैं।

+1

मुझे नहीं लगता कि आप ऐसा कर सकते हैं, क्योंकि उनके पास डेस्कटॉप के साथ कोई बातचीत नहीं है। – SqlRyan

+0

क्या आप मुझे इसका एक उदाहरण दिखाएंगे? मैंने अभी तक इस संभावना को नहीं माना है। – Jonn

+0

@ जोन: मैंने यह मेरे लिए नहीं किया है, लेकिन यह आपकी मदद कर सकता है: http: //msdn.microsoft.com/en-us/magazine/cc188923.aspx। ओएस से बात करने के लिए पी/Invoke का प्रयोग करें। यह महत्वपूर्ण है कि आप सीधे किसी भी जीयूआई घटक को कॉल न करें, क्योंकि विंडोज सेवाओं में डिज़ाइन द्वारा जीयूआई नहीं हो सकता है। – Marcel

0

Wikipedia से:

आम तौर पर सेवाएं एक यूजर इंटरफेस की जरूरत नहीं है हालांकि, डेवलपर्स रूपों और अन्य UI घटक जोड़ सकते हैं। इस मामले में, "सेवा गुण संवाद में लॉगऑन टैब पर जांच की जानी चाहिए" सेवा के साथ बातचीत करने की अनुमति दें (हालांकि इस दृष्टिकोण के साथ देखभाल की जानी चाहिए क्योंकि इससे सुरक्षा जोखिम हो सकता है क्योंकि उपयोगकर्ता द्वारा लॉग इन किया गया कोई भी उपयोगकर्ता होगा सेवा के साथ बातचीत करने में सक्षम)।

इस विकल्प के साथ आप किसी सेवा से संदेश बॉक्स प्रदर्शित करने में सक्षम होना चाहिए।

+0

आप इसे कोड में सक्षम कर सकते हैं? – Jonn

+0

@ जोन: मुझे लगता है कि कोड में इसे बदलने के लिए कुछ एपीआई है, लेकिन आम तौर पर इस विकल्प पर भरोसा नहीं किया जाना चाहिए। – Gart

0

डेस्कटॉप से ​​बातचीत करने की सेवा की अनुमति आपको Services.msc कंसोल से करने में मदद करेगी।

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

-1

ओएस: XP विंडोज सेवाओं के लिए इंटरएक्टिव मोड को सक्षम

प्रक्रिया

  1. सेवा नियंत्रण कक्ष खोलें। उदाहरण के लिए: प्रारंभ> नियंत्रण कक्ष> व्यवस्थापकीय उपकरण> सेवाएं।
  2. कास्ट आयरन सिक्योर कनेक्टर सेवा का चयन करें।
  3. सेवा का नाम राइट-क्लिक करें, और गुण चुनें। सेवा गुण विंडो प्रदर्शित होती है।
  4. लॉग ऑन टैब का चयन करें।
  5. स्थानीय सिस्टम खाता चुनें और फिर डेस्कटॉप के साथ बातचीत करने के लिए सेवा को अनुमति दें का चयन करें।
  6. ठीक क्लिक करें।
  7. पुनरारंभ करें क्लिक करें।
+1

यह 10 से अधिक वर्षों से काम नहीं किया है। यह विंडोज विस्टा और बाद में समर्थित नहीं है। –