سؤال

لدي تطبيق وحدة التحكم التي تتطلب استخدام بعض التعليمات البرمجية التي تحتاج إلى مستوى المسؤول.لقد قرأت أن كنت بحاجة إلى إضافة ملف البيان myprogram.exe.واضح أن تبدو مثل هذا :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator">
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

ولكن هذا لا يرفع UAC (في وحدة التحكم أو في التصحيح في مقابل).كيف يمكنني حل هذه المشكلة ؟

التحديث

وأنا قادرة على أن تجعل من العمل إذا كنت تشغيل الحل في المسؤول أو عند تشغيل /بن/*.exe في المسؤول.ما زلت أتساءل إذا كان من الممكن أن يكون شيئا التي سوف البوب عند بدء التطبيق بدلا من صراحة انقر بزر الماوس الأيمن>تشغيل كمسؤول?

هل كانت مفيدة؟

المحلول

تحتاج إلى تضمين بيان UAC كمورد Win32 مضمن.يرى إضافة بيان UAC إلى التعليمات البرمجية المُدارة.

باختصار، يمكنك استخدام أداة سطر أوامر Windows SDK لتضمينها في الملف القابل للتنفيذ.

يمكنك أتمتة هذا كخطوة ما بعد الإنشاء عن طريق وضع السطر التالي كمهمة ما بعد الإنشاء في خصائص مشروع VS الخاص بك:

mt.exe -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$(TargetDir)$(TargetName).exe;#1"

نصائح أخرى

لأي شخص باستخدام Visual Studio انها السوبر سهلة.كنت على وشك إعداد Windows SDK و لا mt.exe بعد بناء الخطوات و كل ذلك قبل ان يدركوا انها بنيت في مقابل.فكرت سجل عليها للأجيال القادمة.

  1. المشروع | إضافة عنصر جديد -> Visual C# البنود -> تطبيق الملف Manifest
  2. فتح التطبيق.بيان التغيير requestedExecutionLevel.@level أن "requireAdministrator"
  3. بناء

Ta-da

سكوت الجواب سوف تفعل ما طلب ، ولكن توصي Microsoft تطبيقات وحدة التحكم في عرض "تم رفض الوصول" رسالة بدلا من المطالبة الارتفاع.

من http://msdn.microsoft.com/en-us/library/bb756922.aspx:

تطبيق وحدة تحكم يعرض انتاجها في إطار وحدة التحكم وليس مع واجهة المستخدم منفصلة.إذا كان التطبيق يحتاج المسؤول الكامل الرمز المميز للوصول إلى تشغيل ، ثم هذا التطبيق يحتاج إلى أن تكون أطلقت من مرتفعة إطار وحدة التحكم.

يجب عليك القيام بما يلي من أجل تطبيقات وحدة التحكم:

  1. علامة أن التطبيق الخاص بك "asInvoker":يمكنك القيام بذلك عن طريق تأليف لائحة التطبيق الخاص بك التي يمكنك تعيين RequestedExecutionLevel == asInvoker.هذا الإعداد يسمح للمتصلين من غير مرتفعة السياقات لإنشاء العملية التي تسمح لهم أن انتقل إلى الخطوة 2.

  2. تقديم رسالة خطأ إذا كان التطبيق هو تشغيل بدون وصول المسؤول رمزية:إذا كان التطبيق الذي أطلق في غير مرتفعة وحدة التحكم التطبيق الخاص بك يجب أن تعطي رسالة قصيرة والخروج.وأوصت الرسالة:"تم رفض الوصول.أذونات المسؤول هناك حاجة إلى استخدام الخيارات المحددة.استخدام مسؤول موجه الأوامر لإتمام هذه المهام."

التطبيق يجب أيضا إرجاع رمز الخطأ ERROR_ELEVATION_REQUIRED في حال عدم إطلاق لتسهيل البرمجة.

بلدي C# كود هذا هو أدناه.يتم اختباره على ويندوز XP (المسؤول -> موافق ، المعيار المستخدم -> نفى) و Windows Server 2008 (مرتفعة المسؤول -> موافق ، غير مرتفعة المسؤول -> نفى المعيار المستخدم -> نفى).

static int Main(string[] args)
{
    if (!HasAdministratorPrivileges())
    {
        Console.Error.WriteLine("Access Denied. Administrator permissions are " +
            "needed to use the selected options. Use an administrator command " +
            "prompt to complete these tasks.");
        return 740; // ERROR_ELEVATION_REQUIRED
    }

    ...
    return 0;
}

private static bool HasAdministratorPrivileges()
{
    WindowsIdentity id = WindowsIdentity.GetCurrent();
    WindowsPrincipal principal = new WindowsPrincipal(id);
    return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top