2011-01-28 11 views
5

मैं सी # (.NET 3.5) में Environment.SetEnvironmentVariable विधि कॉल उपयोग कर रहा हूँ पर एक चर सेट करने के लिए एक लंबा समय लगता:Environment.SetEnvironmentVariable इस तरह उपयोगकर्ता या मशीन स्तर

Environment.SetEnvironmentVariable ( environmentVariable , मूल्य, "मशीन" );

हालांकि यह सिंगल कॉल कई परीक्षण प्रणालियों पर 2 सेकंड से अधिक समय लेता है (एक्सपी और विंडोज 7 दोनों चल रहा है)। I figured out यह हो सकता है क्योंकि: "यदि लक्ष्य उपयोगकर्ता या मशीन है, तो अन्य अनुप्रयोगों को Windows WM_SETTINGCHANGE संदेश द्वारा सेट ऑपरेशन के बारे में अधिसूचित किया जाता है।" क्या इस अधिसूचना को अन्य अनुप्रयोगों पर दबाने का कोई तरीका है ताकि मेरा पर्यावरण जल्दी से सेट हो और वापस लौटाया जा सके ..?

नोट है कि मैं एक घटक है जो करीब 20 वातावरण चर सेट करता है और अगर मैं समारोह के रूप में मैं ऊपर वर्णित है का उपयोग करें, यह उस कार्य को पूरा करने के लिए एक मिनट के आसपास लेता है हो रहा है।

कृपया सुझाव दें !!

उत्तर

9

आप methode के निचले भाग में देखेंगे आप disasambly परावर्तक साथ SetEnvironmentVariable हैं कि SendMessageTimeout करने के लिए एक Win32 कॉल के साथ WM_SETTINGCHANGE। हैंडल HWND_BROADCAST (0xffff) है इसलिए प्रत्येक शीर्ष विंडो को संदेश मिलता है और टाइमआउट 1000ms पर सेट होता है। MSDN के अनुसार:

तो इस पैरामीटर HWND_BROADCAST ((HWND) 0xffff), संदेश को भेजा जाता है प्रणाली, विकलांग या अदृश्य बिना स्वामित्व वाले विंडो के साथ में सभी उच्च-स्तरीय खिड़कियां है। फ़ंक्शन वापस नहीं आता है जब तक प्रत्येक विंडो का समय आउट नहीं होता है। इसलिए कुल प्रतीक्षा समय उच्च-स्तरीय खिड़कियों की संख्या से गुणा uTimeout का मूल्य तक हो सकती है। अन्य अनुरोध पर काम करना समारोह वापस जाने के लिए के लिए है, जबकि इंतजार कर बुला धागा करने से रोका नहीं है:

लेकिन fuFlags पैरामीटर के लिए 0.

SMTO_NORMAL (0x0000) निर्धारित है।

SMTO_BLOCK (0x0001): समारोह रिटर्न जब तक किसी भी अन्य अनुरोध पर काम से बुला धागे को रोकता है।

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

+0

बहुत अच्छा समाधान! बहुत बहुत धन्यवाद। – user844541

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