c# व्यवस्थापक के रूप में चलाने के लिए मैं अपने.NET एप्लिकेशन को कैसे मजबूर करूं?




windows-7 administrator (9)

आप उस मेनिफेस्ट को संशोधित करना चाहते हैं जो प्रोग्राम में एम्बेडेड हो जाता है। यह विजुअल स्टूडियो 2008 और उच्चतर पर काम करता है: प्रोजेक्ट + नया आइटम जोड़ें, "एप्लिकेशन मैनिफेस्ट फ़ाइल" का चयन करें। <requestedExecutionLevel> तत्व को यहां बदलें:

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

जब वे प्रोग्राम शुरू करते हैं तो उपयोगकर्ता को UAC प्रॉम्प्ट मिलता है। बुद्धिमानी से प्रयोग करें; उनका धैर्य जल्दी से बाहर पहन सकता है।

एक बार जब मेरा प्रोग्राम क्लाइंट मशीन पर स्थापित हो जाता है, तो मैं अपने प्रोग्राम को विंडोज 7 पर व्यवस्थापक के रूप में चलाने के लिए कैसे मजबूर करूं?


आपके मैनिफेस्ट में requestedExecutionLevel एक्सेक्यूशन requestedExecutionLevel तत्व जोड़ना केवल आधा युद्ध है; आपको याद रखना होगा कि UAC बंद कर दिया जा सकता है। यदि ऐसा है, तो आपको पुराने स्कूल के तरीके की जांच करनी होगी और यदि उपयोगकर्ता व्यवस्थापक नहीं है तो एक त्रुटि संवाद डालना होगा
(अपने थ्रेड के CurrentPrincipal पर IsInRole(WindowsBuiltInRole.Administrator) को कॉल करें)।


आप EXE फ़ाइल में एक मेनिफेस्ट फ़ाइल एम्बेड कर सकते हैं, जो विंडोज (7 या उच्चतर) को हमेशा व्यवस्थापक के रूप में प्रोग्राम चलाने के लिए कारण बनता है।

आप चरण 6 में अधिक जानकारी प्राप्त कर सकते हैं : एक एप्लिकेशन मैनिफेस्ट (यूएसी) (एमएसडीएन) बनाएं और एम्बेड करें


के अनुसार

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

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

  • अगला, प्रोजेक्ट पर राइट क्लिक करें
  • नए सामान को जोड़ो
  • अंत में, एप्लिकेशन मैनिफेस्ट फ़ाइल ढूंढें और क्लिक करें

ऐसा करने का एक और तरीका, केवल कोड में, यह पता लगाना है कि प्रक्रिया @NG द्वारा उत्तर में व्यवस्थापक के रूप में चल रही है या नहीं। । और फिर एप्लिकेशन को फिर से खोलें और वर्तमान को बंद करें।

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

नीचे दिए गए कोड में नोट NeedsToRunAsAdmin एक विधि है जो पता लगाती है कि वर्तमान स्थितियों के तहत व्यवस्थापक विशेषाधिकारों की आवश्यकता है या नहीं। यदि यह false रिटर्न देता false तो कोड स्वयं को ऊपर नहीं उठाएगा। यह दूसरों के ऊपर इस दृष्टिकोण का एक बड़ा फायदा है।

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

private static void Main(string[] args)
{
    if (NeedsToRunAsAdmin() && !IsRunAsAdmin())
    {
        ProcessStartInfo proc = new ProcessStartInfo();
        proc.UseShellExecute = true;
        proc.WorkingDirectory = Environment.CurrentDirectory;
        proc.FileName = Assembly.GetEntryAssembly().CodeBase;

        foreach (string arg in args)
        {
            proc.Arguments += String.Format("\"{0}\" ", arg);
        }

        proc.Verb = "runas";

        try
        {
            Process.Start(proc);
        }
        catch
        {
            Console.WriteLine("This application requires elevated credentials in order to operate correctly!");
        }
    }
    else
    {
        //Normal program logic...
    }
}

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

    return principal.IsInRole(WindowsBuiltInRole.Administrator);
}

विजुअल स्टूडियो 2008 पर काम करते समय, Project -> Add New Item पर राइट क्लिक Project -> Add New Item और फिर Application Manifest File

मैनिफेस्ट फ़ाइल में, आपको requestedExecutionLevel लेवल का requestedExecutionLevel गया टैग मिलेगा, और आप स्तर को तीन मानों पर सेट कर सकते हैं:

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

या

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

या

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

व्यवस्थापक के रूप में चलाने के लिए अपना एप्लिकेशन सेट करने के लिए, आपको मध्य को चुनना होगा।


अपने निष्पादन योग्य पर राइट क्लिक करें, गुण> संगतता पर जाएं और 'इस प्रोग्राम को व्यवस्थापक के रूप में चलाएं' बॉक्स को चेक करें।

यदि आप इसे सभी उपयोगकर्ताओं के लिए व्यवस्थापक के रूप में चलाने के लिए चाहते हैं, तो 'सभी उपयोगकर्ताओं के लिए सेटिंग बदलने' में वही काम करें।


विस्तृत कदम पालन के रूप में हैं।

  1. समाधान में एप्लिकेशन मेनिफेस्ट फ़ाइल जोड़ें
  2. एप्लिकेशन सेटिंग को "app.manifest" में बदलें
  3. प्रशासक की आवश्यकता के लिए "requestExecutionLevel" का टैग अपडेट करें।

ध्यान दें कि इस कोड का उपयोग करने के लिए आपको ClickOnce की सुरक्षा सेटिंग्स को बंद करने की आवश्यकता है, ऐसा करने के लिए, गुण -> सुरक्षा -> क्लिकऑन सुरक्षा के अंदर जाएं


विजुअल स्टूडियो 2010 में अपने प्रोजेक्ट नाम पर राइट क्लिक करें। "विंडोज सेटिंग्स देखें" दबाएं, यह "app.manifest" नामक फ़ाइल उत्पन्न करता है और खोलता है। फ़ाइल के भीतर टिप्पणी अनुभागों में समझाया गया है कि इस फ़ाइल के भीतर "asInvoker" को "requireAdministrator" के साथ प्रतिस्थापित करें।





elevated-privileges