Can*_*ide 4 c# windows-principal winforms
我的本地用户帐户位于Administrators组中,我想简单地弄清楚Windows窗体项目将如何确定我是否在管理员组中.所以,我启动了一个Windows窗体项目,并尝试了以下内容:
[STAThread]
static void Main()
{
string adminGroup1 = @"BUILTIN\Administrators";
string adminGroup2 = Environment.MachineName + @"\Administrators";
string adminGroup3 = Environment.MachineName.ToLower() + @"\Administrators";
string adminGroup4 = "Administrators";
string adminGroup5 = "administrators";
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
WindowsPrincipal currentUser1 = (WindowsPrincipal)Thread.CurrentPrincipal;
bool IsAdmin1_1 = currentUser1.IsInRole(adminGroup1); // false
bool IsAdmin1_2 = currentUser1.IsInRole(adminGroup2); // false
bool IsAdmin1_3 = currentUser1.IsInRole(adminGroup3); // false
bool IsAdmin1_4 = currentUser1.IsInRole(adminGroup4); // false
bool IsAdmin1_5 = currentUser1.IsInRole(adminGroup5); // false
WindowsPrincipal currentUser2 = new WindowsPrincipal(WindowsIdentity.GetCurrent());
bool IsAdmin2_1 = currentUser2.IsInRole(adminGroup1); // false
bool IsAdmin2_2 = currentUser2.IsInRole(adminGroup2); // false
bool IsAdmin2_3 = currentUser2.IsInRole(adminGroup3); // false
bool IsAdmin2_4 = currentUser1.IsInRole(adminGroup4); // false
bool IsAdmin2_5 = currentUser2.IsInRole(adminGroup5); // false
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
Run Code Online (Sandbox Code Playgroud)
为什么上述所有检查都失败了?
尝试
currentUser1.IsInRole(WindowsBuiltInRole.Administrator)
Run Code Online (Sandbox Code Playgroud)
请参阅MSDN.
"在Windows Vista和更高版本的Windows操作系统中,用户帐户控制(UAC)确定用户的权限.[..]执行IsInRole方法的代码不显示"同意"对话框.如果代码返回false,则代码返回false即使您在内置管理员组中,您也处于标准用户角色中