c# - للصف - لغة فيجوال بيسك



تشغيل العملية كمسؤول من تطبيق غير مسؤول (1)

يجب عليك استخدام ShellExecute . ShellExecute هو API الوحيد الذي يعرف كيفية بدء تشغيل Consent.exe لكي يتم رفع.

عينة (. NET) شفرة المصدر

في C # ، طريقة استدعاء ShellExecute لاستخدام Process.Start مع UseShellExecute = true :

private void button1_Click(object sender, EventArgs e)
{
   ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\Notepad.exe");
   info.UseShellExecute = true;
   info.Verb = "runas";
   Process.Start(info);
}

إذا كنت تريد أن تكون مطورًا جيدًا ، فيمكنك التقاطه عندما ينقر المستخدم على لا :

private void button1_Click(object sender, EventArgs e)
{
   const int ERROR_CANCELLED = 1223; //The operation was canceled by the user.

   ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\Notepad.exe");
   info.UseShellExecute = true;
   info.Verb = "runas";
   try
   {
      Process.Start(info);
   }
   catch (Win32Exception ex)
   {
      if (ex.NativeErrorCode == ERROR_CANCELLED)
         MessageBox.Show("Why you no select Yes?");
      else
         throw;
   }
}

مكافأة المشاهدة

  • UAC - ماذا. ماذا. لماذا ا. . هيكل UAC ، موضحا أن CreateProcess لا يمكن أن تفعل الارتفاع ، فقط إنشاء عملية. ShellExecute هو الشخص الذي يعرف كيفية تشغيل Consent.exe و Consent.exe هو الشخص الذي يتحقق خيارات نهج المجموعة.

ملاحظة : أي رمز صدر في المجال العام. لا الإسناد المطلوبة.

من تطبيق لا يتم تشغيله كمسؤول ، لدي الشفرة التالية:

ProcessStartInfo proc = new ProcessStartInfo();
proc.WindowStyle = ProcessWindowStyle.Normal;
proc.FileName = myExePath;
proc.CreateNoWindow = false;
proc.UseShellExecute = false;
proc.Verb = "runas";

عندما أتصل بـ Process.Start (proc) ، لا أحصل على نافذة منبثقة لطلب الإذن للعمل كمسؤول ، ولا يتم تشغيل exe كمسؤول.

حاولت إضافة app.manifest إلى الملف القابل للتنفيذ الموجود في myExePath ، وقمت بتحديث طلب التنفيذ Lecution إلى

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

باستخدام app.manifest المحدّث ، في استدعاء Process.Start (proc) ، أحصل على استثناء ، "تتطلب العملية المطلوبة الارتفاع".

لماذا لا يقوم إجراء .Verb بتعيين امتيازات المسؤول؟

أنا اختبار على Windows Server 2008 R2 قياسي.





processstartinfo