2012-06-13 3 views
66

तो मैं एक ऐसा एप्लिकेशन लिख रहा था जिसके लिए रजिस्ट्री तक पहुंच की आवश्यकता है। मैंने किसी भी बिल्ड सेटिंग्स को छुआ नहीं था, इससे पहले कि मैं विवरण या नाम जैसे अन्य स्पर्श जोड़ूं, काम करने के लिए काम करना चाहता हूं।

नीले रंग से, मुझे एक त्रुटि मिलती है जो दूर नहीं जाएगी। ClickOnce does not support the request execution level 'requireAdministrator'. अब, मैंने इस एप्लिकेशन में क्लिकऑन को छुआ नहीं था। मैंने जो कुछ किया था, उनमें एक अनुमति फ़ाइल शामिल थी जिसमें इन अनुमतियों का अनुरोध किया गया था।

मेरी समस्या अब यह है कि यह त्रुटि दूर नहीं जाएगी, और मैं अपने प्रोग्राम को संकलित नहीं कर सकता। क्या करना है इस पर कोई सलाह? (साइड नोट: मैं बिस्तर पर जाने वाला हूं, इसलिए मैं इसे कल दोपहर जांचूंगा)।"क्लिकऑन अनुरोध निष्पादन स्तर का समर्थन नहीं करता है 'आवश्यकता प्रशासक।'"

+4

मुझे यहां स्पष्ट रूप से बताने से नफरत है, लेकिन * आपने 'आवश्यकता प्रशासक' अनुमतियों का अनुरोध करने के लिए एक मैनिफेस्ट जोड़ा है * और * क्लिकऑनेंस ने शिकायत शुरू कर दी है कि यह 'आवश्यकता प्रशासक' * का समर्थन नहीं करता है। समस्या बेहद स्पष्ट होनी चाहिए। ClickOnce आपके मैनिफेस्ट में एलिवेशन की आवश्यकता को देख रहा है (जो आपके एप्लिकेशन का हिस्सा बन जाता है)। मुझे यकीन नहीं है कि आपको यहां और क्या चाहिए ... –

+2

@ केनहाइट: हालांकि, शायद यह पूरी तरह से स्पष्ट नहीं है और न ही तार्किक है कि एक बार क्लिक के साथ संयोजन में व्यवस्थापक आवश्यकता आपको परियोजना को _compiling_ से रोकती है, न कि इसे चलाने के लिए - लेकिन ऐसा होता है। –

+0

@ 500-आंतरिक सर्वर सर्वर, तर्क आपको यह बताने चाहिए कि एक कारण संबंध केवल इस तथ्य से मौजूद है कि "व्यवस्थापक की आवश्यकता" जोड़ने से इसे "व्यवस्थापक समर्थित नहीं होना चाहिए", आईएमओ के साथ कुछ करने के कारण संकलन नहीं करना पड़ता है। :-) –

उत्तर

111

संपादित करें: यह टिप्पणी भी एक अच्छा जवाब देती है।

जब भी आप "प्रकाशित करें" पर क्लिक करते हैं, तो सक्षम होने पर क्लिक करें, चाहे आप इसे चाहते हैं या नहीं! यदि आप "आवश्यकता प्रशासक" का उपयोग कर रहे हैं तो ऐसा लगता है कि आप ClickOnce का उपयोग नहीं कर सकते हैं, और इसलिए आपकी प्रोजेक्ट "प्रकाशित" नहीं कर सकते हैं।


मूल:

बाहर कर देता है कि सुरक्षा टैब के अंतर्गत, "ClickOnce सुरक्षा सेटिंग्स सक्षम करें" जांच की गई। भले ही मैंने इसे जांच नहीं लिया। वैसे भी, अनचेकिंग ने क्लिकऑन को मुझे त्रुटियां देने से रोक दिया। यही कारण है कि कुछ समय लिया लगता है ...

+2

आह, मैंने सोचा था कि आपको मिली त्रुटि संदेश से स्पष्ट था;) –

+2

मुझे क्या भ्रमित कर दिया गया था कि मैंने क्लिकऑन सक्षम नहीं किया था। – LMS

+0

अच्छा सवाल और उत्तर, यह मेरी मदद की, धन्यवाद! – Moh

12

क्या तुमने कभी प्रकाशन विज़ार्ड का उपयोग, या 'अभी प्रकाशित', क्लिक करें-एक बार चेकबॉक्स स्वचालित रूप से चयनित हो जाता है ...

3

अपने app.Manifest में एक नजर डालें फ़ाइल और आप इस देखेंगे:

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

वहाँ टिप्पणी में वहाँ निर्देश है, लेकिन सिर्फ "requireAdministrator" को हटाने और इस में सम्मिलित जगह मेरे लिए समस्या हल है:

<requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
+2

ओपी का कहना है कि उन्हें अपने आवेदन में रजिस्ट्री तक पहुंच की आवश्यकता है, इसलिए यह एक विकल्प नहीं है। – LeeCambl

+0

यह एक समाधान नहीं है, जब आपके आवेदन की आवश्यकता होती है ... – deadManN

2

मुझे एक ही समस्या है I "क्लिकऑन सुरक्षा सेटिंग्स सक्षम करें" विजुअल स्टूडियो राइट में इस विकल्प को ढूंढने के लिए अपने पर क्लिक करें परियोजना ==> गुण ==> सुरक्षा का चयन करें ==> क्लिकऑन सुरक्षा सक्षम करें सेटिंग्स (यह विकल्प पहले से ही चेक किया गया था इसलिए मैंने इसे अनचेक किया और मेरी समस्या हल हो गई)।

34

मैं इस एक पुराने सवाल है, लेकिन मैं यहाँ दो साल बाद तो आया था:

आप इस मुद्दे को मदद करने के लिए परियोजना प्रॉपर्टीज़ पर सुरक्षा टैब से ClickOnce अक्षम कर सकते हैं नीचे देखें:

enter image description here

-9

सिर्फ

Imports System.security 

और यू कोई त्रुटि प्राप्त होगी और आपके आवेदन व्यवस्थापक के रूप में चलाया जाएगा

+1

बस एक असेंबली के लिए संदर्भ निर्दिष्ट करने से प्रत्येक मामले में किसी भी कोड को निष्पादित नहीं किया जाएगा। अधिक पोस्ट किए बिना, यह हमें कुछ भी नहीं बताता है। यह पोस्ट प्रशासनिक रजिस्ट्री संपादन की आवश्यकता के संबंध में है और अधिक विशेष रूप से विजुअल स्टूडियो प्रकाशन विकल्प के माध्यम से तैनाती है जो क्लिकऑन असेंबली उत्पन्न करता है। स्पष्टता की कमी, या स्पष्ट रिलीज की कमी के लिए डाउनवॉटेड। –

5

मैं जानता हूँ कि यह पुराना है लेकिन मैं इसे भर में ठोकर खाई देख जवाब के लिए।मेरे मामले में, मैं प्रकाशित फ़ंक्शन का उपयोग कर रहा हूं और मुझे इसका उपयोग जारी रखने की आवश्यकता है। मुझे व्यवस्थापक क्षमताओं तक पहुंच की भी आवश्यकता है। तो इसी कारण से, उपर्युक्त उत्तरों में से कोई भी मेरे लिए काम नहीं करता है।

मैंने अपने आवेदन की शुरुआत में एक विधि जोड़ना समाप्त कर दिया जो जांचता है कि यह व्यवस्थापक के रूप में चलाया जा रहा है और यदि यह नहीं है, तो खुद को व्यवस्थापक के रूप में पुनः लॉन्च करें। ऐसा करने के लिए, आपको निम्नलिखित संदर्भों को जोड़ा जाना चाहिए।

using System; 
using System.Diagnostics; 
using System.Reflection; 
using System.Security.Principal; 

तो आपको इसे कहीं और रखना होगा कि आपकी मुख्य विधि के पास आसान पहुंच है। मैं WPF का उपयोग कर रहा हूं इसलिए मैंने इसे MainWindow.xaml.cs में जोड़ा लेकिन आप इसे अपने कोड में कहीं भी जोड़ सकते हैं। बस इन तरीकों के लिए "स्थैतिक" जोड़ना याद रखना चाहिए, आपको इसकी आवश्यकता होनी चाहिए।

private void AdminRelauncher() 
{ 
    if (!IsRunAsAdmin()) 
    { 
     ProcessStartInfo proc = new ProcessStartInfo(); 
     proc.UseShellExecute = true; 
     proc.WorkingDirectory = Environment.CurrentDirectory; 
     proc.FileName = Assembly.GetEntryAssembly().CodeBase; 

     proc.Verb = "runas"; 

     try 
     { 
      Process.Start(proc); 
      Application.Current.Shutdown(); 
     } 
     catch(Exception ex) 
     { 
      Console.WriteLine("This program must be run as an administrator! \n\n" + ex.ToString()); 
     } 
    } 
} 

private bool IsRunAsAdmin() 
{ 
    WindowsIdentity id = WindowsIdentity.GetCurrent(); 
    WindowsPrincipal principal = new WindowsPrincipal(id); 

    return principal.IsInRole(WindowsBuiltInRole.Administrator); 
} 

अंत में, आपके प्रोग्राम की शुरुआत में, विधि का संदर्भ जोड़ें। मेरे मामले में, मैंने इसे मेनविंडो में जोड़ा लेकिन इसे मुख्य कार्यों में भी जोड़ दिया।

public MainWindow() 
{ 
    InitializeComponent(); 
    AdminRelauncher(); //This is the only important line here, add it to a place it gets run early on. 
} 

आशा है कि इससे मदद मिलती है!

+0

हालांकि यह काम करता है, आप नुकसान डीबग बिंदु: | – deadManN

+0

@deadManN सुनिश्चित नहीं है कि आपका क्या मतलब है। –

+0

यह एक नया उदाहरण शुरू करता है, जो परिभाषित करके डीबगर से संलग्न नहीं होता है .. (आप नए मुक्त (अनुपयुक्त) उदाहरण पर कॉल करते हैं, और डीबगर से जुड़े एक को बंद करते हैं) – deadManN

1

यह क्रिया "क्लिकऑन सुरक्षा सेटिंग्स सक्षम करें" का चयन करके हासिल की जा सकती है (क्योंकि इसे प्रकाशित के दौरान "अनचेक" नहीं किया जा सकता है) और फिर "यह आंशिक ट्रस्ट एप्लिकेशन" चुनकर। "स्थानीय इंट्रानेट" स्वचालित रूप से ड्रॉप-डाउन मेनू में चुना जाएगा जो बिल्कुल ठीक है।

अपने परिवर्तनों को सहेजें, एप्लिकेशन प्रकाशित करें, किए गए-स्कीस। :-) Security Settings Snippet

1

यहाँ VB.NET

के लिए
If Not New WindowsPrincipal(WindowsIdentity.GetCurrent).IsInRole(WindowsBuiltInRole.Administrator) Then 
      Process.Start(New ProcessStartInfo With { _ 
                .UseShellExecute = True, _ 
                .WorkingDirectory = Environment.CurrentDirectory, _ 
                .FileName = Assembly.GetEntryAssembly.CodeBase, _ 
                .Verb = "runas"}) 

संपादित करें कोड स्निपेट है: लेकिन आप इस तरह से तैनात हैं, तो आपके कोड कुछ ए वी- सॉफ्टवेयर ब्लॉक।

+0

क्यों? सब कुछ उस स्निपेट और संकेत के साथ ठीक है, कि एवी इस कोड को ब्लॉक कर सकता है भी सही है। हर जगह कुछ ट्रोल। – Tzwenni

+0

अगर कोई बहुत दयालु होगा और मेरी पोस्ट को फिर से शून्य पर ले जा सकता है, तो अच्छा होगा। thx – Tzwenni

+0

प्रश्न सी # के लिए है, इसलिए मुझे लगता है कि उन्होंने – Lonefish

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

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