2012-02-16 194 views
4

我的本地用戶帳戶位於Administrators組,我想簡單瞭解Windows窗體項目如何確定我是否在管理員組中。所以,我開始了一個windows窗體項目,並嘗試了以下方法:爲什麼WindowsPrincipal.IsInRole總是爲「管理員」組返回false?

[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()); 
} 

爲什麼上述所有檢查都失敗?

+0

您是否正在使用英文Windows版本?否則,您必須爲「管理員」組指定本地化名稱。 – 2012-02-16 11:07:18

+2

UAC是在所以你不是管理員,直到提示後?以管理員身份運行您的代碼以證明。 – 2012-02-16 11:10:31

+0

@TonyHopkinson你是對的。在VS提升權限後開始檢查。 – Candide 2012-02-16 11:16:19

回答

5

嘗試

currentUser1.IsInRole(WindowsBuiltInRole.Administrator) 

MSDN

「在Windows Vista及更高版本的Windows操作系統中,用戶帳戶控制(UAC)確定用戶的特權。[..]執行IsInRole方法的代碼不顯示同意對話框。如果您處於標準用戶角色,即使您位於內置管理員組中,代碼也會返回false「

+0

這仍然返回false? – ferventcoder 2015-02-08 16:19:27