.NET एप्लिकेशन को हमेशा एडमिनिस्ट्रेटर के रूप में कैसे चलाएं? पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

.NET एप्लिकेशन को हमेशा एडमिनिस्ट्रेटर के रूप में कैसे चलाएं? (और पागल न हों)

\n\n

नमस्ते, सहकर्मी! यदि आपने कभी रजिस्ट्री के साथ काम करने, Windows सेवाएँ स्थापित करने या बस C:\\Program Files में फ़ाइल सहेजने का प्रयास करने के लिए कोई उपयोगिता लिखी है, तो आप निश्चित रूप से इससे परिचित हैं: एप्लिकेशन "Access Denied" त्रुटि के साथ क्रैश हो जाता है, उपयोगकर्ता कंधे उचकाता है, और आप अपना सिर खुजलाते हैं। परिचित स्थिति? UAC (User Account Control) और एडमिनिस्ट्रेटर अधिकारों के लिए शाश्वत संघर्ष की दुनिया में आपका स्वागत है।

\n\n

आज हम Stack Overflow पर सबसे लोकप्रिय प्रश्न (हाँ, वही, हज़ारों बार देखा गया) का विश्लेषण करेंगे: "How do I force my .NET application to run as administrator?"। हम केवल उत्तर कॉपी नहीं करेंगे, हम समझेंगे कि यह कैसे काम करता है, और C# में सुंदर कोड लिखेंगे। चलिए शुरू करते हैं!

\n\n

ऐसे ही क्यों नहीं? UAC का जादू

\n\n

Windows, Vista से शुरू करके, डिफ़ॉल्ट रूप से एप्लिकेशन पर भरोसा नहीं करता है। भले ही आप "एडमिनिस्ट्रेटर" के रूप में लॉग इन हों, आपकी प्रक्रिया को फ़िल्टर किए गए अधिकारों वाला एक टोकन मिलता है। यह सुरक्षा के लिए किया गया है: ताकि वायरस आसानी से सिस्टम फ़ाइलों को ओवरराइट न कर सके।

\n\n

जब आप .exe चलाते हैं, तो सिस्टम उसके मैनिफेस्ट को देखता है। यदि वहाँ कोई विशेष चिह्न नहीं है, तो एप्लिकेशन सामान्य उपयोगकर्ता के अधिकारों के साथ चलता है। हमारा काम इस चिह्न को जोड़ना है।

\n\n

विधि 1: मैनिफेस्ट जोड़ना (.NET Framework के लिए सही तरीका)

\n\n

यह .NET Framework पर क्लासिक Windows Forms या WPF एप्लिकेशन के लिए मानक और सबसे आसान तरीका है।

\n\n

चरण 1: app.manifest फ़ाइल बनाना या संपादित करना

\n\n

Visual Studio में, प्रोजेक्ट पर राइट-क्लिक करें → Add → New Item → Application Manifest File। यदि फ़ाइल पहले से मौजूद है (जैसे, app.manifest), तो बस इसे खोलें।

\n\n

आपको ढेर सारी टिप्पणियों के साथ XML दिखाई देगा। हमारी रुचि requestedExecutionLevel सेक्शन में है। इसे इस रूप में लाएँ:

\n\n
<?xml version="1.0" encoding="utf-8"?>\n<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">\n  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>\n  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">\n    <security>\n      <requestedPrivileges>\n        <!-- महत्वपूर्ण: यह पंक्ति है -->\n        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n</assembly>
\n\n

level="requireAdministrator" पर ध्यान दें। दो और मान हैं:

\n
    \n
  • asInvoker — पैरेंट प्रक्रिया के अधिकारों के साथ चलाना (डिफ़ॉल्ट)।
  • \n
  • highestAvailable — वर्तमान उपयोगकर्ता के लिए उपलब्ध अधिकतम अधिकारों के साथ चलाना।
  • \n
\n\n

चरण 2: मैनिफेस्ट को प्रोजेक्ट से लिंक करना (यदि स्वचालित रूप से काम नहीं किया)

\n\n

प्रोजेक्ट गुण खोलें (प्रोजेक्ट पर राइट-क्लिक करें → Properties)। Application टैब पर, Resources सेक्शन ढूँढें और "Manifest" ड्रॉपडाउन सूची में "app.manifest" चुनें।

\n\n

हो गया! अब जब आप अपना .exe चलाएंगे, तो Windows तुरंत UAC विंडो दिखाएगा: "क्या आप इस एप्लिकेशन को अपने डिवाइस में बदलाव करने की अनुमति देना चाहते हैं?" यदि उपयोगकर्ता "हाँ" दबाता है, तो एप्लिकेशन को पूर्ण एडमिनिस्ट्रेटर अधिकार मिल जाएंगे।

\n\n

विधि 2: एलिवेशन के साथ प्रोग्रामेटिक रीस्टार्ट (.NET Core / .NET 5+ के लिए)

\n\n

यह विधि सार्वभौमिक है और .NET Core, .NET 5/6/7/8 और .NET Framework में भी काम करती है। कभी-कभी मैनिफेस्ट उपयुक्त नहीं होता क्योंकि:

\n
    \n
  • आप चाहते हैं कि एप्लिकेशन बिना अधिकारों के चले, लेकिन कुछ फ़ंक्शन को एलिवेशन की आवश्यकता होती है।
  • \n
  • आप कंसोल एप्लिकेशन या सेवा का उपयोग कर रहे हैं।
  • \n
\n\n

विचार सरल है: एप्लिकेशन जाँचता है कि उसके पास अधिकार हैं या नहीं। यदि नहीं, तो यह स्वयं को फिर से चलाता है, लेकिन runas कुंजी के साथ (से

ब्लॉग

पुस्तक अनुशंसाएँ