2012-04-19 11 views
5

मुझे अपने आवेदन व्यवस्थापक अधिकार देने की आवश्यकता है, यह जानकर कि यह उपयोगकर्ता सत्र से चलाया जाएगा, न कि व्यवस्थापक खाते।व्यवस्थापक को विशेषाधिकार विशेषाधिकार रखने के लिए मजबूर

मैंने अन्य साइटों पर देखा है, लेकिन मदद करता है कि कुछ भी नहीं मिल सकता है।

मैं संपादन अन्य बातों के अलावा प्रकट की कोशिश की और लाइन वहाँ डाला है:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

यह मैं जब ClickOnce का उपयोग कर प्रकाशित करने के प्रयास, लेकिन जब मैं डिबग नहीं एक त्रुटि दे दी है।

क्या आप मेरी मदद कर सकते हैं?

उत्तर

1

मुझे पूरा यकीन है कि यह व्यवहार डिज़ाइन द्वारा है।

क्लिकऑन ऐप्स को प्रशासक विशेषाधिकारों के बिना स्थापित करने के लिए डिज़ाइन किया गया है। रनटाइम पर उन्हें ऊपर उठाना संभव नहीं है क्योंकि इसका मतलब यह है कि प्रभावी रूप से कोई उपयोगकर्ता बिना किसी व्यवस्थापक अधिकार वाले उपयोगकर्ता को इंस्टॉल कर सकता है, फिर ऐप को व्यवस्थापक के रूप में चला सकता है; यह एक सुरक्षा जोखिम होगा।

5

सब से पहले - वास्तव में, यह डिजाइन द्वारा अनुमति नहीं है, व्यवस्थापक के रूप में स्थापित करने के लिए और ClickOnce अनुप्रयोग: http://msdn.microsoft.com/en-us/library/142dbbz4(v=vs.90).aspx

इस पोस्ट पर एक नज़र डालें: http://antscode.blogspot.ca/2011/02/running-clickonce-application-as.html - यह बताते हैं कि कैसे व्यवस्थापक के रूप में ClickOnce अनुप्रयोग चलाने के लिए। लेकिन - यह कहना है कि मैंने इस मार्ग पर चले गए हैं - और मुझे इसके साथ बहुत भाग्य नहीं मिला। मुझे इस दृष्टिकोण के साथ कई परेशानियां थीं (व्यवस्थापक विशेषाधिकारों के साथ क्लिकऑन ऐप चलाने की कोशिश कर रहा था)। जहां तक ​​मुझे याद है, सबसे बड़ी समस्या ऑटो-अपडेट ठीक से काम नहीं कर रही थी। उल्लेख नहीं है कि गैर-व्यवस्थापक उपयोगकर्ताओं को हर समय व्यवस्थापक प्रमाण-पत्र दर्ज करना पड़ सकता है।

तो मेरी सलाह अपने तर्क पर पुनर्विचार, और टुकड़ा तो आपको एक अलग EXE फ़ाइल में व्यवस्थापक के रूप में किया जा करने की जरूरत है संपुटित करने के लिए हो सकता है - और यह बहुत एक उपयोगकर्ता के लिए स्पष्ट कर दूं कि जब वह उस बटन पर क्लिक करता, यूएसी शीघ्र दिखाएगा (शायद बटन में "शील्ड" आइकन जोड़कर)। और उस बटन_क्लिक घटना में ऐसा कुछ करें:

// 2. Run Photoshop action on this image (and wait for the task to complete) 
if (string.IsNullOrWhiteSpace(this.PhotoshopEnhanceActionAbsPath) == false) 
{ 
    var pi = new ProcessStartInfo(this.PhotoshopEnhanceActionAbsPath, "\"" + imgPhotoshopActionAbsPath + "\""); 
    pi.UseShellExecute = true; 
    pi.Verb = "runas"; 
    var photoshopAction = Process.Start(pi); 
    var success = photoshopAction.WaitForExit(); 
    if (success == false) 
    { 
     // do something here 
    }     
} 

यह दृष्टिकोण मेरे लिए बहुत अच्छा काम करता है। यहां कुंजी यह है:

pi.UseShellExecute = true; 
pi.Verb = "runas"; 

यह आपके EXE को व्यवस्थापक अधिकार के साथ चलाता है - इसलिए उस समय यूएसी प्रॉम्प्ट प्रदर्शित किया जाएगा। यहां एक और अच्छा परिणाम यह है कि उपयोगकर्ता प्रत्येक बार ऐप का उपयोग कर तर्क के इस विशेष टुकड़े को नहीं चला सकते हैं - और इसलिए जब उन्हें इसकी आवश्यकता नहीं होती है तो वे प्रॉम्प्ट से नाराज नहीं होंगे।

+0

और यूएसी प्रॉम्प्ट के बिना? – Atoxis

+0

@Matth क्षमा करें, मैं आपके प्रश्न पर स्पष्ट नहीं हूं। लक्ष्य ऊंचा मोड में कुछ कोड चलाने के लिए है। जब तक कि आप एक व्यवस्थापक नहीं हैं, आपको अपने ऐप को बढ़ाने के लिए उस प्रॉम्प्ट की आवश्यकता है। – avs099

+0

इंजीनियरों जो इस एप्लिकेशन का उपयोग करेंगे कंप्यूटर पर एक उपयोगकर्ता खाता है। एप्लिकेशन prvilèges प्रक्रिया करता है जिसके लिए एक व्यवस्थापक की आवश्यकता होती है। सुरक्षा कारणों से उनके व्यवस्थापक खाते प्रदान किए जाने के बावजूद बाहर है। मैं बस उपयोगकर्ता के बारे में पारदर्शी होना चाहता हूँ। और इसी सिद्धांत मैं पहले से ही यूएसी धन्यवाद के बिना प्रक्रिया invoker में कामयाब रहे आदेशों को p.StartInfo.UserName = "उपयोगकर्ता" p.StartInfo.Password = "गुप्त" लेकिन केवल चिंता है कि मेरे कमांड प्रॉम्प्ट प्रदर्शित किया जाता है । जबकि मुझे यह पसंद है कि यह पृष्ठभूमि में चलता है। – Atoxis

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