C# AD GroupPrincipal:调用的目标已引发异常

C# AD GroupPrincipal:调用的目标已引发异常,c#,active-directory,adsi,C#,Active Directory,Adsi,我能够以这个用户的身份运行以下代码,在所有其他情况下都没有问题。出于某种原因,在这一特定情况下,当向组中添加用户并在查看用户是否已添加之前进行检查时,会出现以下异常: 调用的目标已引发异常 此错误发生在调用行 这不应该发生。发送的目录对象是正确的,组存在,我可以从中删除成员,甚至可以添加成员,而无需作为测试进行检查。在我的应用程序的其他区域中,使用此代码时不会出错。我在许多其他应用程序中使用此代码,并已使用多年。这是怎么回事?我忘了什么 private bool userIsMember(str

我能够以这个用户的身份运行以下代码,在所有其他情况下都没有问题。出于某种原因,在这一特定情况下,当向组中添加用户并在查看用户是否已添加之前进行检查时,会出现以下异常:

调用的目标已引发异常

此错误发生在调用行

这不应该发生。发送的目录对象是正确的,组存在,我可以从中删除成员,甚至可以添加成员,而无需作为测试进行检查。在我的应用程序的其他区域中,使用此代码时不会出错。我在许多其他应用程序中使用此代码,并已使用多年。这是怎么回事?我忘了什么

private bool userIsMember(string strUser, DirectoryEntry strGroup)
{
    bool result = true;
    try
    {
        object[] args = { strUser };
        object IsMember = strGroup.Invoke("IsMember", args);

        if ((bool)IsMember == true)
        {
            result = true;
        }
        else
        {
            result = false;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Problem with user: " + strUser + "\r\n\r\n" + ex.Message + "\r\n\r\n" + ex.ToString());
    }

    return result;
}

如果它能在其他应用程序中工作,那么我猜为什么它不能在这里工作,是因为运行此代码的用户的凭据(换句话说,安全性)有所不同

但不管怎样,如果可以,我将切换到System.DirectoryServices.AccountManagement中的类。他们更加友好:

PrincipalContext principalContext = new PrincipalContext(ContextType.Domain);
GroupPrincipal group = GroupPrincipal.FindByIdentity(principalContext, "GName");

GroupPrincipal有一个可以搜索的Members属性。

上面的方法很有用,但当使用它检查用户是否是组成员时,它会抛出异常。我假设您的意思是检查bool group.members.contains(userprincipal用户)