2011-01-31 15 views
5

मैं वर्तमान में एक एप्लिकेशन लांचर/ऑटोपॉटर पर काम कर रहा हूं। तो "प्रोग्राम फ़ाइलें" में ऐप इंस्टॉल/अपडेट करने के लिए, मुझे व्यवस्थापक अधिकारों का अनुरोध करने की आवश्यकता है।एकल विधि के लिए व्यवस्थापक-विशेषाधिकार

ठीक है, चूंकि अद्यतनकर्ता को केवल कुछ लिखने की आवश्यकता है यदि नए संस्करण पाए जाते हैं, तो मैंने केवल को विशेषाधिकारों का अनुरोध करने का प्रयास किया, यदि कोई नया संस्करण मिलता है।

अपडेटर हर निष्पादित किया जाता है, आवेदन की शुरूआत से पहले, इसलिए पूछ "हर" Adminrights के लिए कोई समाधान नहीं है ...

मैं एक बहुत खोज की, और निम्नलिखित पाया:

[PrincipalPermission(SecurityAction.Demand, Role = @"Administrators")] 
    private void InstallOrUpdate(AppItem appItem) 

लेकिन wenn मैं इसे करने की कोशिश करता हूं, अद्यतनकर्ता सुरक्षा अपवाद फेंकता है ...

मूल अनुमति के लिए अनुरोध विफल रहा।

मैं क्या गलत कर रहा हूं?

सादर, dognose

उत्तर

3

आप इसे चलाने के बाद एप्लिकेशन के लिए अनुमतियां बढ़ा नहीं सकते हैं। प्रशासकों की भूमिका का अनुरोध करने के लिए, इसे निष्पादन योग्य के स्टार्टअप समय पर किया जाना होगा।

आपका सबसे अच्छा विकल्प होगा कि आपके अपडेटर को InstallOrUpdate करने के लिए या तो अलग-अलग अनुमतियों के अनुरोध के साथ स्वयं को फिर से चलाने के लिए अलग-अलग निष्पादन योग्य होगा (या एक अलग कमांड लाइन तर्क के साथ, संभावित रूप से)।

+0

जब मैं विंडोज़ में प्रशासनिक चीजें कर रहा हूं, तो मुझे उनके आगे प्रशासनिक आइकन के साथ फॉर्म में बटन दिखाई देते हैं। जब मैं बटन पर क्लिक करता हूं, तो यूएसी उन्नत विशेषाधिकारों के लिए पूछता है। क्या आप कह रहे हैं कि प्रत्येक प्रशासनिक बटन के लिए विंडोज एक नई प्रक्रिया शुरू कर रहा है? या क्या कुछ अलग हो रहा है? – Phil

+0

@ फिल: हाँ। असल में, यदि आप एक यूएसी प्रॉम्प्ट देखते हैं, तो आप जानते हैं कि उस बिंदु पर एक नई प्रक्रिया शुरू की जा रही है। –

+0

@ फिल, एक अच्छा उदाहरण विंडोज टास्क मैनेजर और 'सभी उपयोगकर्ताओं से प्रक्रियाएं दिखाएं' बटन है। इसे क्लिक करने से कार्य प्रबंधक को अपडेट नहीं किया जाता है, यह इसे उन्नत अनुमतियों के साथ पुनः लॉन्च करता है। –

2

यूएसी ऊंचाई प्रति प्रक्रिया, यानि कि प्रक्रिया के रूप में एक पूरी ऊंचा है, एकल विधि के अनुसार नहीं है। कार्रवाई का सबसे अच्छा तरीका, एक विशिष्ट कार्य प्रक्रिया बनाना होगा जिसके लिए ऊंचे विशेषाधिकारों की आवश्यकता होगी, और उस प्रक्रिया को अपने अद्यतनकर्ता से लॉन्च करें जब इसे वास्तव में कुछ काम करने की आवश्यकता हो। This might help

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