0

我正在尝试使用 c# 和 .NET 3.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

将可执行文件编译为 .NET 4.5 时,WindowsIdentity.GetCurrent().IsGuest 在来宾帐户上返回 true(否则返回 false)。

根据 msdn 文档,IsGuest 应该适用于 .net 3.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 检查账户是否是Guest 组的成员, 3.5 检查账户是否是Guest 用户账户。这是我用完汽油的地方,你的信息说是。除了出现在 User.Value 中的“域”奇怪之外。确保该帐户是计算机帐户而不是域帐户。来宾帐户的正确 SID 是 S-1-5-21-32-501。

一种可能的解决方法是按照 4.5 的方式执行此操作,检查帐户是否在来宾组中。

于 2012-10-21T18:08:27.903 回答