2008-09-11 9 views
6

विस्टा से पहले विंडोज के पूर्व संस्करणों में आप विंडोज़ सेवा को वर्तमान में लॉग इन डेस्कटॉप उपयोगकर्ता के साथ इंटरैक्ट कर सकते हैं ताकि सेवा से स्क्रीन पर आसानी से प्रदर्शित जानकारी हो सके। विंडोज विस्टा सत्र 0 में डेस्कटॉप से ​​सेवाओं को अलग करने के लिए सुरक्षा के लिए जोड़ा गया था। सेवा 0 और सत्र 0 के बाहर चल रहे एप्लिकेशन के बीच संवाद करने का एक आसान तरीका क्या है? अब तक मैं दोनों के बीच संवाद करने के लिए टीसीपी/आईपी का उपयोग कर इस के आसपास मिल गया है, लेकिन ऐसा करने के लिए यह एक बेवकूफ तरीका प्रतीत होता है।आप Windows Vista सत्र 0 और डेस्कटॉप के बीच कैसे संवाद करते हैं?

उत्तर

4

आप आईपीसी की सुविधा के लिए साझा स्मृति या नामित पाइप का भी उपयोग कर सकते हैं। संकल्पनात्मक रूप से यह टीसीपी/आईपी के समान है, लेकिन आपको एक अप्रयुक्त पोर्ट खोजने के बारे में चिंता करने की ज़रूरत नहीं है।

आपको यह सुनिश्चित करना होगा कि आपके द्वारा बनाई गई नामित वस्तुओं को "ग्लोबल \" के साथ उपसर्ग किया गया है ताकि उन्हें here वर्णित सभी सत्रों तक पहुंचाया जा सके।

AFAIK किसी भी सेवा के लिए सीधे डेस्कटॉप से ​​बातचीत करने का कोई तरीका नहीं है।

3

दरअसल, सुरक्षा कारणों से सीधे "डेस्कटॉप" के साथ संवाद करना संभव नहीं है। वैसे भी "डेस्कटॉप" वास्तव में क्या है, जब आप कई सक्रिय उपयोगकर्ताओं + दूरस्थ सत्र वाली मशीन में रहते हैं?

समस्या को हल करने का सामान्य तरीका सेवा ऐप्स का उपयोग करना है जो कुछ आरपीसी तंत्र (टीसीपी/आईपी, आईपीसी, नेट रिमोटिंग चैनलों में से एक पर इत्यादि) के माध्यम से संवाद करते हैं। इसका दर्द है, लेकिन मुझे लगता है कि लाभ परिवर्तन के लायक हैं।

1

डेस्कटॉप से ​​बात करने की सेवा के लिए, आप आरपीसी तंत्र में से एक के साथ काफी अटक गए हैं। .NET रीमोटिंग तंत्र (IpcServerChannel) इस उद्देश्य के लिए लागू करना मुश्किल नहीं है।

साथ ही .NET के साथ एक डेस्कटॉप एप्लिकेशन ServiceController.ExecuteCommand के साथ सीधे सेवा में संदेश भेज सकता है। ये आदेश ServiceBase.OnCustomCommand के माध्यम से सेवा द्वारा प्राप्त किए जाते हैं। यह करना भी आसान है, और यदि सेवा को नियंत्रित करना आपकी एकमात्र आवश्यकता है तो आपको इसकी आवश्यकता होगी।

संबंधित मुद्दे