मैं एक अलग उपयोगकर्ता खाते के तहत चल रहे किसी एप्लिकेशन को एक संदेश भेजने की कोशिश कर रहा हूं (एक उपयोगकर्ता जो कंप्यूटर पर किसी भिन्न खाते से लॉग इन होता है, XP पर और बाद में त्वरित उपयोगकर्ता स्विच का उपयोग करके, और एप्लिकेशन को निष्पादित किया गया)।उपयोगकर्ता खाते में द्वितीयक लॉग इन पर चल रहे किसी एप्लिकेशन को संदेश भेजना
पृष्ठभूमि यह है कि मेरा एप्लिकेशन स्वयं अपडेट हो सकता है, लेकिन ऐसा करने के लिए कि सभी चल रहे उदाहरण पहले बंद हो जाएं।
उदाहरणों को बंद करने की आवश्यकता है (केवल प्रक्रिया को मारने की बजाय), इसलिए अद्यतनकर्ता उन्हें एक कस्टम संदेश भेजकर (SendMessage
के साथ) करता है। एक संदेश भेजने के लिए मुझे प्रक्रिया की मुख्य विंडो में एक हैंडल की आवश्यकता है।
यह EnumWindows
का उपयोग करके ठीक काम करता है - जब तक कि एक ही उपयोगकर्ता खाते के तहत इंस्टेंस चल रहे हों, क्योंकि EnumWindows
किसी भिन्न उपयोगकर्ता से संबंधित विंडो सूचीबद्ध नहीं करता है।
इसलिए मैंने एक अलग दृष्टिकोण की कोशिश की। मैंने सिस्टम पर सभी चल रही प्रक्रियाओं को पहली बार सूचीबद्ध करने के लिए CreateToolhelp32Snapshot
का उपयोग किया, और फिर CreateToolhelp32Snapshot
पर कॉल करने वाले धागे के माध्यम से फिर से शुरू किया। उन थ्रेड आईडी के साथ मैं EnumThreadWindows
का उपयोग करके अपनी खिड़कियां सूचीबद्ध कर सकता था।
एक बार फिर यह ठीक काम करता है, लेकिन .. एक बार फिर केवल वर्तमान लॉग इन उपयोगकर्ता के लिए। यहां समस्या यह है कि भले ही CreateToolhelp32Snapshot
किसी भिन्न उपयोगकर्ता से संबंधित प्रक्रिया आईडी सूचीबद्ध करता है, लेकिन यह उनके संबंधित थ्रेड आईडी सूचीबद्ध नहीं करता है। इसके लिए कोड थोड़ा लंबा है, लेकिन यदि यह आवश्यक है तो मैं इसे संपादित कर सकता हूं - कृपया इसके लिए एक टिप्पणी छोड़ दें।
तो, मैं अपने आवेदन के मुख्य विंडो हैंडल को एक अलग लॉग इन उपयोगकर्ता खाते पर कैसे चला सकता हूं?
आप इन सुरक्षा प्रतिबंधों से बचने के लिए नामित पाइप की तरह कुछ उपयोग करना पड़ सकता है।आप जो करने की कोशिश कर रहे हैं वह इंटरैक्टिव डेस्कटॉप के साथ संचार करने वाली सत्र 0 सेवाओं के समान है और ऐसे समाधान जो आपके लिए काम करेंगे, आपके लिए काम करेंगे। –
ऐसा लगता है कि मुझे ऑब्जेक्ट करने का मौका दिए बिना उपयोगकर्ता की प्रक्रियाओं को बंद करने का थोड़ा सा मतलब है। अधिकांश अपडेटर्स अगली बार जब ऐप अपडेट करने लगते हैं तब तक प्रतीक्षा करें। डेविड के –
+1। यहां तक कि विंडोज़ आपको अन्य लॉग ऑन उपयोगकर्ताओं के बारे में चेतावनी देता है यदि आप एक अन्य सक्रिय सत्र के दौरान शट डाउन करने का प्रयास करते हैं। सत्र सीमा में प्रक्रियाओं के लिए "बातचीत" करने वाली कुछ भी थोड़ा अजीब और डरावनी है। बस 'उपयोगकर्ता "प्रशासक जैसे कुछ पॉप-अप करने वाले एप्लिकेशन को इस दस्तावेज़ को खोला गया है, क्या आप मुझे उस प्रक्रिया को बंद करना चाहते हैं ताकि आप दस्तावेज़ पर काम कर सकें?' –