كيف يمكنني معرفة ما إذا كان بلدي عملية تشغيل كمسؤول?

StackOverflow https://stackoverflow.com/questions/509292

  •  21-08-2019
  •  | 
  •  

سؤال

أود أن عرض المزيد من عناصر واجهة المستخدم عند عملية يتم تشغيل كمسؤول بدلا من عندما لا يكون مماثلة إلى كيف Visual Studio 2008 يعرض 'المسؤول' في شريط العنوان عند تشغيل كمسؤول.كيف يمكنني أن أعرف ؟

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

المحلول

من الناحية الفنية, إذا كنت تريد أن ترى إذا كان العضو هو المسؤول المحلي الحساب, ثم يمكنك الحصول على معرف الأمان (SID) المستخدم الحالي من خلال User الملكية على WindowsIdentity الدرجة, مثل (ثابت GetCurrent طريقة يحصل مستخدم ويندوز الحالي):

WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();

string sid = windowsIdentity.User.ToString();

على User الخاصية بإرجاع SID المستخدم الذي لديها عدد من القيم المعرفة مسبقا لمختلف مجموعات المستخدمين.

ثم يمكنك أن تحقق لمعرفة ما إذا كان SID النمط التالي ، مشيرا إلى أنه هو حساب المسؤول المحلي (وهو معروف SID):

S-1-5-{الأخرى سيد أجزاء}-500

أو إذا كنت لا ترغب في تحليل السلاسل ، يمكنك استخدام SecurityIdentifier الدرجة:

// Get the built-in administrator account.
var sid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, 
    null);

// Compare to the current user.
bool isBuiltInAdmin = (windowsIdentity.User == sid);

ومع ذلك أنا أعتقد أن ما كنت حقا تريد أن تعرف إذا كان المستخدم الحالي هو عضو من المسؤولين المجموعة على الجهاز المحلي.يمكنك الحصول على هذا SID باستخدام WellKnownSidType من BuiltinAdministratorsSid:

// Get the SID of the admin group on the local machine.
var localAdminGroupSid = new SecurityIdentifier(
    WellKnownSidType.BuiltinAdministratorsSid, null);

ثم يمكنك التحقق من Groups الملكية على WindowsIdentity المستخدم لمعرفة ما إذا كان المستخدم عضوا المحلية مشرف الفريق مثل ذلك:

bool isLocalAdmin = windowsIdentity.Groups.
    Select(g => (SecurityIdentifier) g.Translate(typeof(SecurityIdentifier))).
    Any(s => s == localAdminGroupSid);

نصائح أخرى

وأنا أعتقد أن هذا هو آلية بسيطة جيدة.

using System.Security.Principal;

WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
bool isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);

وفيما يلي الخطوط الملاحية المنتظمة واحدة للقيام بذلك.

using System.Security.Principal;

static bool IsElevated => new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);

وشعرت أنه من المهم أن نلاحظ صعوبة كان لي مع محاولة استخدام WellKnownSidType.BuiltinAdministratorsSid في الإجابة casperOne في أعلاه. وفقا ل WellKnownSiDType MSDN ، BuiltinAdministratorsSid "يشير إلى SID يطابق حساب المسؤول." لذلك أتوقع كود casperOne على العمل، واعتقد انه من المرجح الحال في بعض البيئات. للأسف، لم يفعل ذلك على بلدي ويندوز 2003 مع NET 2.0 (رمز القديمة). عادت فعلا S-1-5-32-544 التي، وفقا ل هذه المقالة هو سيد للمشرفين <م> المجموعة . وهكذا، فشل مقارنة بالنسبة لي. وسوف تضطر إلى القيام مقارنة سلسلة بلدي لstartswith "S-1-5-21" (أي كيلوبايت 243330 يشير يتم تضمين "21" على الرغم من أن بلوق المشار إليها أعلاه لا) وendswith "500".

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