"ClickOnce अनुरोध निष्पादन स्तर का समर्थन नहीं करता है


93

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

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

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


4
मैं यहाँ स्पष्ट बताने के लिए नफरत करता हूँ, लेकिन आपने एक requireAdministratorअनुमति देने का अनुरोध किया है और ClickOnce ने शिकायत करना शुरू कर दिया है कि यह समर्थन नहीं करता हैrequireAdministrator । समस्या अत्यंत स्पष्ट होनी चाहिए। ClickOnce आपके प्रकट में उन्नयन की आवश्यकता को देख रहा है (जो आपके आवेदन का हिस्सा बन जाता है)। मुझे यकीन नहीं है कि आपको यहां और क्या चाहिए ...
केन व्हाइट

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

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

1
समस्या यह नहीं है कि मैं ClickOnce और व्यवस्थापक अनुमतियों का उपयोग करना चाहता हूं, समस्या यह है कि मैं व्यवस्थापक अनुमतियों का उपयोग करना चाहता हूं, और इसे पहले (लगभग 10 बार) उनके साथ संकलित किया है, लेकिन इस बार ClickOnce कह रहा है कि यह असंगत है।
एलएमएस

10
@KenWhite समस्या आपके सुझाव के अनुसार स्पष्ट नहीं है। समस्या तब होती है जब आप "प्रकाशित" बटन पर क्लिक करते हैं (कम से कम यह मेरे लिए किया था)। मैंने मेनिफेस्ट को जोड़ा और "रिक्वायड एडिटिवेटर" का चयन किया, जिसके बाद प्रोग्राम ने त्रुटिपूर्ण रूप से काम किया। केवल जब मैंने प्रकाशित पर क्लिक किया, तो मुझे यह त्रुटि मिलनी शुरू हो गई, और जब तक मैं सेटिंग्स में नहीं गया और "ClickOnce" को अक्षम नहीं कर सका, तब तक यह स्पष्ट नहीं हो सका। तो इसका समाधान यह नहीं है कि "requAdministrator" समर्थित नहीं है, लेकिन यह कि "ClickOnce" सक्षम नहीं किया जा सकता है, और यदि आपके पास "requirementAdministrator" सेट है, तो आप "Publish" पर क्लिक नहीं कर सकते।
गैविन कोट

जवाबों:


147

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

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


मूल:

यह पता चलता है कि सुरक्षा टैब के तहत, "ClickOnce सुरक्षा सेटिंग्स सक्षम करें" चेक किया गया था। हालांकि मैंने इसकी जाँच नहीं की। फिर भी, अनचेक करने से मुझे क्लिक करने में त्रुटियां होने लगीं। जिसे खोजने में थोड़ा समय लगा ...


3
आह, मुझे लगा कि आपके द्वारा प्राप्त त्रुटि संदेश से स्पष्ट था;)
500 - आंतरिक सर्वर त्रुटि

3
मुझे क्या उलझन थी कि मैंने ClickOnce को सक्षम नहीं किया।
एलएमएस

अच्छा सवाल और जवाब, इसने मेरी मदद की, धन्यवाद!
मो

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

1
@GavinCoates का कहना है कि सही है। कारण यह है कि ClickOnce एप्लिकेशन को इसके AppDataफ़ोल्डर में प्रति उपयोगकर्ता हमेशा इंस्टॉल किया जाता है । विशेषाधिकार ऊंचाई उपयोगकर्ता के संदर्भ के एक स्विच का कारण होगा जहां ClickOnce एप्लिकेशन भी इंस्टॉल नहीं किया गया है।
बर्टल

43

मैं यह एक पुराना सवाल जानता हूं लेकिन मैं दो साल बाद यहां आया हूं:

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

यहां छवि विवरण दर्ज करें


3
और जब आप अपना आवेदन प्रकाशित करेंगे तो यह चेकबॉक्स फिर से चेक किया जाएगा।
दिक्किनी

@dikkini, बिल्कुल! इसे कैसे निष्क्रिय किया जाए, किसी के पास इसका जवाब है?
कहाफगन

@saidfagan इस मामले का कोई जवाब या समाधान नहीं है। मैं exe और dll फ़ाइलों को संयोजित करने के लिए ULMerge का उपयोग करता हूं।
दिक्किनी

18

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


16

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

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

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()
{
    try
    {
        WindowsIdentity id = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(id);
        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch (Exception)
    {
        return false;
    }
}

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

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

उम्मीद है की यह मदद करेगा!


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

1
@deadManN बहुत सच है। जब से मुझे उस समय तक डिबगर की ज़रूरत नहीं पड़ी, तब तक मैंने इसे इधर-उधर कर दिया, लेकिन मुझे लगता है कि आप VS को व्यवस्थापक के रूप में चला सकते हैं और फिर प्रोग्राम को व्यवस्थापक मोड में भी लॉन्च किया जाएगा। पुनः आरंभ लंघन। मुझे यकीन है कि परीक्षण करेंगे।
टायलर C

1
किसी को भी इस पर ठोकर खाने के लिए, ऊपर वास्तव में काम करता है।
टायलर सी

>> 'आवेदन' नाम वर्तमान संदर्भ में मौजूद नहीं है। त्रुटि
वी

यह कोड केवल नई प्रक्रिया शुरू करता है लेकिन मेरा ऐप कंसोल है इसलिए तर्क सिर्फ खाली छोड़ देते हैं।
वी

5

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

अपने परिवर्तन सहेजें, एप्लिकेशन प्रकाशित करें, स्किस करें। :-)सुरक्षा सेटिंग्स स्निपेट


2

अपनी ऐप में देखिए। मेनिफेस्ट फ़ाइल और आप इसे देखेंगे:

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

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

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

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

requireAdministratorरजिस्ट्री को लिखने के लिए विशेषाधिकार की आवश्यकता होती है, इसलिए यह एक आवश्यकता होगी।
स्कीपरहप

ClickOnce अनुरोध निष्पादन स्तर का समर्थन नहीं करता हैasInvoke
स्कीशर्प

2

मेरे पास एक ही समस्या है कि मैं इसे " ClickOnce सुरक्षा सेटिंग्स सक्षम करें " को अनचेक करके इसे हल कर रहा हूं। अपने प्रोजेक्ट पर Visual Studio राइट क्लिक में इस विकल्प को खोजने के लिए ==> गुण ==> सुरक्षा चुनें ==> क्लिकऑन सुरक्षा सेटिंग्स सक्षम करें (यह विकल्प था पहले से ही जाँच की गई थी इसलिए मैंने इसे अनियंत्रित कर दिया और मेरी समस्या हल हो गई)।


2

यहाँ 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"})

EDIT: लेकिन अगर आप इस तरह से तैनाती करते हैं, तो कुछ AV-Software आपके कोड को ब्लॉक कर देते हैं।


1

जो लोग अनचेक का उपयोग करते हैं, "मैं क्लिक विधि को सक्षम करने के लिए ClickOnce सुरक्षा सेटिंग्स को सक्षम नहीं कर सकता"।

सबसे पहले, अपने ऐप को छोड़ दें।

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

और फिर आप अपने Program.cs फ़ाइल को इस तरह संपादित करते हैं:

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

पुनर्गठन मुख्य विधि जैसे:

    static void Main()
        {
            var wi = WindowsIdentity.GetCurrent();
            var wp = new WindowsPrincipal(wi);

            bool runAsAdmin = wp.IsInRole(WindowsBuiltInRole.Administrator);

            if (!runAsAdmin)
            {
                // It is not possible to launch a ClickOnce app as administrator directly,
                // so instead we launch the app as administrator in a new process.
                var processInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase);

                // The following properties run the new process as administrator
                processInfo.UseShellExecute = true;
                processInfo.Verb = "runas";

                // Start the new process
                try
                {
                    Process.Start(processInfo);
                }
                catch (Exception)
                {
                    // The user did not allow the application to run as administrator
                    MessageBox.Show("Sorry, but I don't seem to be able to start " + 
                       "this program with administrator rights!");
                }

                // Shut down the current process
                Application.Exit();
            }
            else
            {
                // We are running as administrator
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
        }

यह विंडोज 10 और विजुअल स्टूडियो 2019 पर काम करता है!


1

किसी के लिए भी जो इसमें भाग ले रहा है, मैंने सोचा कि मैं अपना योगदान दूंगा जो मेरे लिए काम कर रहा है।

हां, यदि आप बिल्ड> प्रकाशित करते हैं, तो 'Click Clickce सुरक्षा सेटिंग्स सक्षम करें' विकल्प स्वचालित रूप से फिर से जांच लिया जाता है ।

मेरे लिए, मुझे 'प्रकाशित' करने की आवश्यकता नहीं है - यह एक सरल, पोर्टेबल .exe है जो मेरे उपयोगकर्ताओं के लिए शेड्यूल किए गए कार्य बनाता है और मुझे यह सुनिश्चित करने की आवश्यकता है कि जब यह एक प्रशासक के रूप में लॉग-इन किया जाए, तो इसे ऊंचा किया जाए।

इसलिए मैंने बस अपने नवीनतम .exe को \ bin \ रिलीज़ से पकड़ा और यही मेरे क्लाइंट्स सिस्टम पर तैनात किया गया।

उम्मीद के मुताबिक काम किया - यानी जब मैंने इसे एक सिस्टम w / UAC इनेबल / इसकी उच्चतम सेटिंग पर रखा, .exe के पास इस पर 'शील्ड' है, और जब मैं इसे चलाता हूं, तब भी जब लॉग-इन एक प्रशासक के रूप में, यह ऊंचा हो जाता है और मुझे UAC प्रॉम्प्ट मिल जाता है।

मेरा छोटा सा कार्य शेड्यूलर ऐप अब 'एक्सेस अस्वीकृत' त्रुटि प्राप्त किए बिना कार्य बनाने में सक्षम है (जो पहले, केवल .exe पर राइट-क्लिक करके और व्यवस्थापक के रूप में रन पर क्लिक करके काम किया जा सकता था)।


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

-12

केवल

Imports System.security

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


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

यह ... यह एक नहीं है। यह आपकी लाइन काउंट को बढ़ाने के अलावा कुछ भी नहीं करेगा। 1. किसी असेंबली या कॉलिंग मेथड के संदर्भ में असेंबली को रेफरेंसिंग करना असेंबली के लिए बिल्कुल कुछ नहीं होगा। पिछली टिप्पणी की तरह।
स्कीपरहैप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.