gpt4 book ai didi

c# - 无法解释的 InvalidOperationException 与 GroupPrincipal 和 SAM PrincipalContext

转载 作者:行者123 更新时间:2023-11-30 19:34:09 29 4
gpt4 key购买 nike

我正在尝试创建一个这样的委托(delegate)人:

PrincipalContext pc = new PrincipalContext(ContextType.Machine);
GroupPrincipal group = new GroupPrincipal(pc);

group.Name = "Some Group Name";
group.Description = "Some Group Name Description";

group.Save();

但是,当执行代码时,我收到以下异常消息:

System.DirectoryServices.AccountManagement: Property is not valid for this store type.

如果我设置Description属性,上面的代码工作得很好,只是没有组的描述。

我做错了什么吗?

提前致谢。

编辑:我相信我已经找到了解决方法(对于任何可能感兴趣的人)。组的创建方法同上:

PrincipalContext pc = new PrincipalContext(ContextType.Machine);
GroupPrincipal group = new GroupPrincipal(pc);
group.Save();

现在您创建一个 DirectoryEntry 并将其链接到新创建的组,如下所示:

string path = "WinNT://" + machineName + "/" + group.SamAccountName;
DirectoryEntry dEntry = new DirectoryEntry(path);

这允许访问该组的属性,但我感兴趣的是描述,所以:

dEntry.Properties["description"].Add("Some Decription");
dEntry.CommitChanges();

那应该就可以了。

最佳答案

重写了答案

我已经得到了你的答案,但你可能不太喜欢它。网上的资料很少,但是用代码,是可以解释的:

  • 当您创建 GroupPrincipal , 一个 Context被添加到它。 This Context内部是一个隐藏类型:SAMStoreCtx,继承自一个抽象类型StoreCtx;
  • 您调用的 GroupPrincipal 上的每个属性都将调用 SamStoreCtx 的内部成员 IsValidProperty;
  • 但是,它不会为 Name 属性这样做;
  • 在 SAMStoreCtx 内部,有一段代码如下所示(Reflector 输出):

    internal override bool IsValidProperty(Principal p, string propertyName)
    {
    ObjectMask none = ObjectMask.None;
    if (!ValidPropertyMap.TryGetValue(propertyName, out none))
    {
    return false;
    }
    if ((MaskMap[p.GetType()] & none) <= ObjectMask.None)
    {
    return false;
    }
    return true;
    }
  • 仔细查看该代码(我花了一点时间),您会发现错误。使用 and 运算符将位标志与 none 进行比较的行将始终导致 ObjectMask.None。因此,第二个 if 语句始终为真
  • 当此方法返回 false 时,调用代码(Description 的 Property Settor)抛出异常。

我认为这是 Microsoft 库中的错误。它只发生在 SAMStoreCtx 中。也许是故意的,但因为代码在那里但总是返回 false,所以我相信程序员打算改用 or-operator。使用 DisplayName 等其他属性检查我的发现会引发与预期相同的异常。

您可以就此联系 Microsoft 并向他们展示此线程。我还没有检查 .NET 4.0 的新测试版,它可能会以不同的方式出现。您可以通过下载 Reflector 并加载相关的 .NET 程序集来自行检查。

编辑:我已经为您联系了 Microsoft 并通过 connect.microsoft.com here 报告了错误。 .如果愿意,您可以在那里关注问题。

关于c# - 无法解释的 InvalidOperationException 与 GroupPrincipal 和 SAM PrincipalContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2086806/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com