2009-06-04 13 views
8

जब मैं स्थानीय सिस्टम खाते के रूप में एक सेवा चलाने के लिए, मैं निम्नलिखित कोड का वर्तमान लॉगिन खाते के अंतर्गत एक जीयूआई कार्यक्रम शुरू करने के लिए उपयोग कर सकते हैं:विंडोज सेवा में जीयूआई प्रोग्राम कैसे लॉन्च करें?

WTSGetActiveConsoleSessionId-> WTSQueryUserToken-> CreateProcessAsUser

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

सेवा मेरे व्यक्तिगत खाते के अंतर्गत चलने पर जीयूआई प्रोग्राम लॉन्च करने के लिए मुझे क्या करना चाहिए?

उत्तर

2

जॉन और जेडिजिटल दोनों मेरी समझ से सही हैं, सेवाओं में आमतौर पर डेस्कटॉप पहुंच हो सकती है (आपको स्थानीयकरण प्रणाली का उपयोग करना होगा) या नेटवर्क एक्सेस (आपको चलाने के लिए एक खाता निर्दिष्ट करने की आवश्यकता है)।

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

+0

मैं अपने खाते से सेवा चलाने की योजना बना रहा हूं ताकि यह स्थानीय और नेटवर्क संसाधन तक पहुंच सके। "क्लाइंट "जानकारी प्राप्त करने और इसे नियंत्रित करने के लिए उससे बात करेंगे। लेकिन जैसा कि मैंने नीचे लिखा है, एक अजीब बात यह है कि यह" प्रशासक "के स्वामित्व वाली फाइलें, मेरा खाता (Vista OS) नहीं है। यह मुझे भ्रमित करता है। – trudger

0

यह सब मुझे विश्वास की अनुमतियों के साथ करना है।

स्थानीय सिस्टम में वर्तमान उपयोगकर्ता का प्रतिरूपण करने के लिए पर्याप्त विशेषाधिकार हैं, लेकिन आपका खाता नहीं है।

आपको अपनी सेवा में अनुमतियां बढ़ाने के लिए, या तो क्रेडेंशियल के लिए संकेत देकर, या स्थानीय सिस्टम के रूप में चलने वाली सहायक सेवा से कनेक्ट करने का तरीका पता लगाना होगा।

(क्यों आप स्थानीय सिस्टम के बजाय अपने खाते के साथ चलाने के लिए चाहते हैं?)

मुझे यकीन है कि और अधिक पूरी तरह से जवाब है कि में और बाहर ऐसा करने का के साथ सौदा नहीं है, लेकिन एक उच्च स्तरीय मैं कम से लगता है कि यह मुद्दा है।

+0

धन्यवाद जॉन, दो कारण हैं: 1) स्थानीय सिस्टम को Vista 2 में नेटवर्क साझा फ़ोल्डर्स तक पहुंचने की अनुमति नहीं है 2) स्थानीय सिस्टम सेवा द्वारा जेनरेट की गई सभी फाइलें "व्यवस्थापक" के स्वामित्व में हैं। मैं अपने व्यक्तिगत खाते के स्वामित्व वाली फाइलों को चाहता हूं। – trudger

0

आप गलत विंडो स्टेशन या डेस्कटॉप में चल रहे हैं। यह Microsoft reference on Window Stations and Desktops देखें।

+0

सेवा मेरे व्यक्तिगत खाते द्वारा चल रही है और मैं वर्तमान में लॉग इन हूं। मैंने अभी जांच की है, प्रोग्राम चल रहा है, लेकिन दिखाई नहीं देता है। – trudger

+0

यदि आप लिंक पर नज़र डालते हैं, तो आप देखेंगे कि यह अनुमतियों का मुद्दा नहीं है। माइक्रोसॉफ्ट प्रक्रिया अलगाव के विभिन्न स्तर प्रदान करने के लिए विंडो स्टेशनों और डेस्कटॉप का उपयोग करता है। इसके आसपास काम करने के तरीके हैं, जैसे SetProcessWindowStation और SwitchDesktop, लेकिन एप्लिकेशन को दो भागों में विभाजित करना आम तौर पर अनुशंसित समाधान है। – jdigital

+0

हां, क्लाइंट/सर्वर मोड यह है कि मैं करने की योजना बना रहा हूं। यह ऐसी समस्या का समाधान करेगा।लेकिन एक अजीब चीज यह है कि हालांकि सेवा मेरे व्यक्तिगत खाते द्वारा चल रही है, जो फाइलें "व्यवस्थापक" के स्वामित्व वाली हैं, मेरा खाता नहीं। आप इस संपत्ति को "फ़ाइल गुण-> विवरण-> स्वामी" पर देख सकते हैं। क्या यह मेरे खाते के स्वामित्व में नहीं होना चाहिए? – trudger

0

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

मुझे लगता है कि आपकी सबसे अच्छी शर्त किसी अन्य कोण से समस्या को हल करना है और केवल एक जीयूआई एप्लिकेशन बनाएं जो उपयोगकर्ता चलाता है (मैन्युअल रूप से या स्वचालित रूप से लॉगिन पर) और यह आपकी सेवा से बात करता है।

+0

यदि ऐसा है, तो उपयोगकर्ता को GUI ऐप बंद करने पर अधिसूचना नहीं मिलेगी। लेकिन लगता है कि मेरे पास कोई दूसरा विकल्प नहीं है। :( – trudger

+0

@trudger: नहीं। उपयोगकर्ता खड़े हो जाते हैं और कंप्यूटर से दूर चलते हैं, लेकिन इसका मतलब यह नहीं है कि आप अपने सॉफ़्टवेयर के साथ हैंडकफ भेजते हैं। –

+0

हां, यह इंद्रियां बनाता है। मैंने पहले से ही निर्णय लिया है जीयूआई और सेवा के बीच संवाद करने के लिए पाइप का उपयोग करने के लिए। शायद मैं इन घटनाओं को भी बफर कर सकता हूं और उन्हें लॉगिन करने पर उपयोगकर्ताओं को दिखा सकता हूं। – trudger

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