2015-12-02 82 views
1

我能够以该用户的身份运行以下代码,在所有其他情况下都没有问题。出于某种原因,在这种特殊情况下,在将用户添加到组中并检查用户是否已添加之前,它给了我这个例外:AD GroupPrincipal:调用目标引发异常

调用的目标引发了异常。

该错误发生在调用行。

这不应该发生。发送的目录对象是正确的,组存在,我可以从它删除成员就好了,我甚至可以添加成员到它而不检查作为测试。在我的应用程序的其他领域,这些代码没有错误地使用。我在许多其他应用程序中使用此代码,并已使用它多年。这里发生了什么?我忘了什么?

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; 
} 

回答

1

如果它工作在其他应用程序,然后我的猜测,为什么它不工作在这里的东西在运行该代码的用户(换句话说,安全)的凭据不同。

但是无论如何,如果可以的话,我会切换到使用System.DirectoryServices.AccountManagement中的类。他们更C#友好:

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

的GroupPrincipal有您可以通过搜索一个成员属性。

+0

上面的方法很有帮助,但在使用它来检查用户是否为组的成员时,会引发异常情况。我假设你的意思是检查布尔group.members.contains(userprincipal用户) –

相关问题