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




windows-7 administrator (8)

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

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

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


आप ClickOnce सुरक्षा सेटिंग्स का उपयोग कर मैनिफेस्ट बना सकते हैं, और उसके बाद इसे अक्षम कर सकते हैं:

Right click on the Project -> Properties -> Security -> Enable ClickOnce Security Settings

आपके द्वारा क्लिक करने के बाद, प्रोजेक्ट के गुण फ़ोल्डर के तहत एक फ़ाइल बनाई जाएगी जिसे एप.मैनिफेस्ट कहा जाता है जिसे एक बार बनाया गया है, आप Enable ClickOnce Security Settings विकल्प को अनचेक कर सकते हैं

उस फ़ाइल को खोलें और इस लाइन को बदलें:

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

सेवा मेरे:

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

इससे प्रोग्राम को व्यवस्थापकीय विशेषाधिकारों की आवश्यकता होगी।


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


ऐसा करने का एक और तरीका, केवल कोड में, यह पता लगाना है कि प्रक्रिया @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);
}

मैंने मैन्युअल रूप से ऐसा करने के लिए कुछ कोड लागू किए हैं:

using System.Security.Principal;
public bool IsUserAdministrator()
{
    bool isAdmin;
    try
    {
        WindowsIdentity user = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(user);
        isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch (UnauthorizedAccessException ex)
    {
        isAdmin = false;
    }
    catch (Exception ex)
    {
        isAdmin = false;
    }
    return isAdmin;
}

विजुअल स्टूडियो 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 की सुरक्षा सेटिंग्स को बंद करने की आवश्यकता है, ऐसा करने के लिए, गुण -> सुरक्षा -> क्लिकऑन सुरक्षा के अंदर जाएं


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

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

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





elevated-privileges