كيف تجعل تطبيق .NET يعمل دائمًا كمسؤول؟ دليل كامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كيف تجعل تطبيق .NET يعمل دائمًا كمسؤول؟ (دون أن تصاب بالجنون)

\n\n

مرحبًا يا زميل! إذا كنت قد كتبت يومًا أداة للعمل مع السجل، أو تثبيت خدمات ويندوز، أو حتى حاولت حفظ ملف في C:\\Program Files، فمن المؤكد أنك واجهت هذا: التطبيق يتعطل مع خطأ "Access Denied"، المستخدم يهز كتفيه، وأنت تحك رأسك. موقف مألوف؟ مرحبًا بك في عالم UAC (التحكم في حساب المستخدم) والمعركة الأبدية للحصول على صلاحيات المسؤول.

\n\n

اليوم سنتناول السؤال الأكثر شيوعًا على Stack Overflow (نعم، نفس السؤال الذي حظي بآلاف المشاهدات): "How do I force my .NET application to run as administrator?". لن نكتفي بنسخ الإجابة، بل سنفهم كيف يعمل ذلك، ونكتب كودًا جميلًا بلغة C#. هيا بنا!

\n\n

لماذا لا يمكن ذلك ببساطة؟ سحر UAC

\n\n

منذ نظام Vista، لا تثق ويندوز في التطبيقات افتراضيًا. حتى إذا قمت بتسجيل الدخول كـ "مسؤول"، فإن عمليتك تحصل على رمز بصلاحيات مُصفّاة. تم ذلك لأغراض أمنية: لمنع الفيروسات من إعادة كتابة ملفات النظام بسهولة.

\n\n

عند تشغيل ملف .exe، ينظر النظام إلى المانيفست الخاص به. إذا لم يكن هناك علامة خاصة، يعمل التطبيق بصلاحيات مستخدم عادي. مهمتنا هي إضافة هذه العلامة.

\n\n

الطريقة 1: إضافة مانيفست (الطريقة الصحيحة لـ .NET Framework)

\n\n

هذه هي الطريقة القياسية والأسهل لتطبيقات Windows Forms أو WPF الكلاسيكية على .NET Framework.

\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 الخاص بك، ستعرض ويندوز فورًا نافذة 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 (من

المدونات

توصيات الكتب