2008-08-20 16 views
25

मेरे सी # ऐप के लिए, मैं हमेशा एप्लिकेशन शुरू करने पर उन्नयन के लिए संकेत नहीं देना चाहता, लेकिन अगर वे यूएसी संरक्षित आउटपुट पथ चुनते हैं तो मुझे ऊंचाई का अनुरोध करने की आवश्यकता है।पथ सुरक्षित होने पर Windows Vista UAC ऊंचाई का अनुरोध करें?

तो, मैं कैसे जांचूं कि पथ यूएसी संरक्षित है या नहीं और फिर मैं ऊंचाई मध्य निष्पादन का अनुरोध कैसे करूं?

उत्तर

25

यह पता लगाने का सबसे अच्छा तरीका है कि क्या वे कोई कार्रवाई करने में असमर्थ हैं, इसका प्रयास करने और UnauthorizedAccessException को पकड़ने के लिए है।

हालांकि @DannySmurfcorrectly points out आप केवल COM ऑब्जेक्ट या अलग प्रक्रिया को बढ़ा सकते हैं।

विंडोज एसडीके क्रॉस टेक्नोलॉजी के नमूने के भीतर एक प्रदर्शन अनुप्रयोग है जिसे UAC Demo कहा जाता है। यह प्रदर्शन अनुप्रयोग एक उन्नत प्रक्रिया के साथ क्रियाओं को निष्पादित करने की एक विधि दिखाता है। यह भी दर्शाता है कि उपयोगकर्ता कैसे वर्तमान में व्यवस्थापक है या नहीं।

+0

यूएसी डेमो के लिए अच्छा संदर्भ, बिल्कुल मुझे क्या चाहिए। बहुत बहुत धन्यवाद। इच्छा है कि मैं कभी-कभी अधिक प्रतिनिधि दे सकता हूं! – Ryan

+0

@ रयान आपका स्वागत है। मैं थोड़ा निराश हूं कि एक प्रबंधित वातावरण में यूएसी कितनी मुश्किल है। मेरे उपयोगकर्ता प्रोफाइल ब्राउज़ करने के लिए स्वतंत्र महसूस करें और मेरे अन्य प्रश्नों को ऊपर उठाएं! :) –

+0

बीटीडब्लू, अपवाद नाम अनधिकृत एक्सेस में एक्स के साथ अनधिकृत एक्सेस अपवाद है। बस कि ;) –

16

का निवेदन ऊंचाई के मध्य निष्पादन की आवश्यकता है कि आप या तो:

  1. एक COM नियंत्रण है कि ऊपर उठाया है, जो एक शीघ्र
  2. प्रारंभ एक दूसरे प्रक्रिया है कि शुरू से ही ऊंचा है डाल देंगे का प्रयोग करें।

.NET में, वर्तमान में चलने वाली प्रक्रिया को बढ़ाने का कोई तरीका नहीं है; आपको उपरोक्त हैकर चीजों में से एक करना है, लेकिन जो कुछ करता है वह उपयोगकर्ता को उपस्थिति देता है कि वर्तमान प्रक्रिया को ऊपर उठाया जा रहा है।

एकमात्र तरीका यह है कि मैं यह जांचने के बारे में सोच सकता हूं कि यूएसी ऊंचा है या नहीं, जब आप एक ऊंचे राज्य में हों, तो अपवाद पकड़ें, उठाएं और पुनः प्रयास करें।

+7

ध्यान दें कि यह एक .NET सीमा नहीं है - यह उपयोगकर्ता खाता नियंत्रण प्रणाली की एक सामान्य सीमा है। –

+4

ध्यान दें कि यूएसी सीमा नहीं है - यह विंडोज एनटी में सुरक्षा मॉडल की एक सामान्य सीमा है (एक चल रही प्रक्रिया इसकी सुरक्षा टोकन नहीं बदल सकती है)। –

+1

ध्यान दें कि यह एक अच्छी बात है - अन्यथा दुर्भावनापूर्ण हमलावर प्री-एलिमेंट प्रक्रिया में कोड इंजेक्ट कर सकता है, और इस कोड को इस प्रक्रिया के साथ बढ़ाया जाएगा। – ghord

1

आप उपयोगकर्ता को सूचित करना चाहते हैं कि पथ सुरक्षित है और उन्हें फ़ाइल को "सुरक्षित" क्षेत्र में आउटपुट करने के लिए कहें। इस तरह आपके ऐप को ऊंचाई की आवश्यकता नहीं होगी। मुझे यकीन है कि यह आपके उपयोगकर्ताओं पर निर्भर करता है और आप क्या करने की कोशिश कर रहे हैं, हालांकि मुझे नहीं लगता कि कृपया उपयोगकर्ता को यह बताने के लिए बहुत कुछ है कि आप विंडोज/सिस्टम 32 फ़ोल्डर में xyz को ठीक डंपिंग महसूस नहीं करते हैं।

-1

यदि आपके द्वितीयक ड्राइव की अपनी फ़ाइल अनुमतियां हैं, जैसे कि आपके पास विंडोज़ की एक अन्य प्रति इंस्टॉल है। यह संकेत देगा।

यह भी संकेत देगा कि फाइलें उपयोग में हैं, जो कभी-कभी होती है यदि आपके पास एक ही निर्देशिका के लिए विंडोज एक्सप्लोरर खुला है और फ़ाइल प्रदर्शित करने वाले फ़ाइल पूर्वावलोकनकर्ता के साथ चुनी गई फ़ाइल ... कुछ अन्य विषमताएं हैं, लेकिन आम तौर पर आप अगर फ़ाइल उपयोग में है या यह एक संवेदनशील निर्देशिका है तो फ़ाइल अनुमति के लिए पूछें।

यदि आप फ़ोल्डर ब्रोसर डायलॉग लूप करते हैं, तो उपयोगकर्ता को सूचित करना सुनिश्चित करें, इसलिए वे आपके ऐप पर पागल नहीं हो जाते हैं।

नोट: यह बदबू आ रही है कि अनुमति मांगने का कोई नेट तरीका नहीं है, शायद पी/Win32 api को आमंत्रित करें ...?

+0

पी/आमंत्रण कुछ भी नहीं बदलेगा; यूएसी के नियम समान हैं कि आप प्रबंधित या मूल हैं या नहीं। यह COM, बाहरी प्रक्रिया, या बस्ट है। –

-1

यूएसी उनके GUID के आधार पर वस्तु तरक्की कर सकते हैं, इस (सिद्धांत रूप में) का मतलब होगा कि एक GUID के साथ किसी भी वर्ग उठाया जा सकता है, UACDemo भी कि यह कैसे