سؤال

بالنسبة لتطبيق C# الخاص بي، لا أرغب دائمًا في المطالبة بالارتفاع عند بدء التطبيق، ولكن إذا اختاروا مسار إخراج محميًا بـ UAC، فسأحتاج إلى طلب الارتفاع.

إذًا، كيف يمكنني التحقق مما إذا كان المسار محميًا بـ UAC ثم كيف أطلب تنفيذ الارتفاع في منتصف التنفيذ؟

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

المحلول

أفضل طريقة لاكتشاف ما إذا كانوا غير قادرين على تنفيذ إجراء ما هي تجربته والقبض عليه UnauthorizedAccessException.

ولكن كما @داني سمورف يشير بشكل صحيح يمكنك فقط رفع كائن COM أو عملية منفصلة.

يوجد تطبيق توضيحي ضمن Windows SDK Cross Technology Samples يسمى العرض التوضيحي لحملات التطبيقات العامة.يُظهر هذا التطبيق التوضيحي طريقة لتنفيذ الإجراءات بعملية مرتفعة.ويوضح أيضًا كيفية معرفة ما إذا كان المستخدم حاليًا مسؤولاً.

نصائح أخرى

يتطلب طلب الارتفاع في منتصف التنفيذ إما:

  1. استخدم عنصر تحكم COM المرتفع، والذي سيطرح مطالبة
  2. ابدأ عملية ثانية مرتفعة من البداية.

في .NET، لا توجد حاليًا طريقة لرفع مستوى العملية الجارية؛عليك القيام بأحد أشياء القرصنة المذكورة أعلاه، ولكن كل ما يفعله هو إعطاء المستخدم مظهرًا بأن العملية الحالية يتم تطويرها.

الطريقة الوحيدة التي يمكنني التفكير فيها للتحقق مما إذا كان المسار مرتفعًا بـ UAC هي محاولة القيام ببعض الكتابة التافهة إليه أثناء وجودك في حالة غير مرتفعة، والتقاط الاستثناء، والرفع والمحاولة مرة أخرى.

لست متأكدًا مما إذا كان ذلك مفيدًا لك ولكن يمكنك إلقاء نظرة على مشاركة المدونة هذه:

http://haishibai.blogspot.com/2010/01/tiy-try-out-windows-7-uac-using-c-part_26.html

قد ترغب في إعلام المستخدم بأن المسار محمي ومطالبته بإخراج الملف إلى منطقة "أكثر أمانًا".بهذه الطريقة لن يحتاج تطبيقك إلى الارتفاع.أنا متأكد من أن الأمر يعتمد على المستخدمين لديك وما تحاول القيام به، ومع ذلك لا أعتقد أن السماح للمستخدم بمعرفة أنك لا تشعر بالرضا تجاه تفريغ xyz في مجلد Windows/System32 أمر مبالغ فيه.

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

سيطالبك أيضًا إذا كانت الملفات قيد الاستخدام، وهو ما يحدث أحيانًا إذا كان لديك Windows Explorer مفتوحًا على نفس الدليل وتم تحديد الملف باستخدام عارض الملفات الذي يعرض المحتويات...هناك بعض الأمور الشاذة الأخرى، ولكن بشكل عام يُطلب منك الحصول على إذن الملف إذا كان الملف قيد الاستخدام أو كان دليلاً حساسًا.

إذا قمت بتكرار FolderBrowserDialog، فتأكد من إعلام المستخدم بالسبب، حتى لا يغضب من تطبيقك.

ملحوظة:لا توجد طريقة .net لطلب الإذن، ربما p/استدعاء واجهة برمجة تطبيقات Win32...؟

يمكن لـ UAC رفع الكائن بناءً على GUID الخاص به، وهذا يعني (من الناحية النظرية) أنه يمكن رفع أي فئة ذات GUID، ويجب أن يوضح UACDemo أيضًا كيفية القيام بذلك

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top