5

私のローカルユーザーアカウントは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());
}

上記のすべてのチェックが失敗するのはなぜですか?

4

1 に答える 1

5

試す

currentUser1.IsInRole(WindowsBuiltInRole.Administrator)

MSDNを参照してください。

「WindowsVista以降のバージョンのWindowsオペレーティングシステムでは、ユーザーアカウント制御(UAC)がユーザーの特権を決定します。[..] IsInRoleメソッドを実行するコードは、[同意]ダイアログボックスを表示しません。コードは、次の場合にfalseを返します。組み込みの管理者グループに属している場合でも、標準のユーザーロールになります。」

于 2012-02-16T11:10:47.727 に答える