0

ユーザーがc#と.NET3.5を使用してwindows7/windows8のゲストであるかどうかを検出しようとしています。

私はここで答えに従い、 WindowsIdentity.GetCurrent()。IsGuestを呼び出してみましたが、ゲストアカウント(windows7およびwindows8)でもfalseが返されませんでした。

WindowsIdentity.GetCurrent()。User.ValueとWindowsIdentity.GetCurrent()。Nameを出力しましたが、どちらも正しいです。

WindowsIdentity.GetCurrent()。Name = ComputerName \ Guest

WindowsIdentity.GetCurrent()。User.Value = S-1-5-21 / Domain / 501

実行可能ファイルを.NET4.5にコンパイルすると、WindowsIdentity.GetCurrent()。IsGuestはゲストアカウントでtrueを返しました(それ以外の場合はfalseを返しました)。

msdnのドキュメントによると、IsGuestは.net3.5と4.5の両方で動作するはずです。足りないものはありますか?

ユーザーがゲストであるかどうかを知る別の方法はありますか?

アップデート:

次のコードが機能します。

  public static bool IsGuest
    {
        get
        {
            try
            {
                var identity = WindowsIdentity.GetCurrent();
                if (identity == null)
                {
                    return false;
                }

                var pricipal = new WindowsPrincipal(identity);
                return pricipal.IsInRole(WindowsBuiltInRole.Guest);
            }
            catch
            {
                return false;
            }
        }
    }
4

1 に答える 1

2

まあ、彼らは確かにそれを異なって行います。4.5 はアカウントが Guests グループのメンバーであるかどうかをチェックし、3.5 はアカウントが Guest ユーザー アカウントであるかどうかをチェックします。あなたの情報によると、ここでガスが不足しています。User.Value に表示される「Domain」の奇妙さ以外。アカウントがドメイン アカウントではなく、マシン アカウントであることを確認してください。Guest アカウントの適切な SID は S-1-5-21-32-501 です。

考えられる回避策は、4.5 と同じ方法で実行し、アカウントがゲスト グループにあるかどうかを確認することです。

于 2012-10-21T18:08:27.903 に答える