Странное исключение COM-взаимодействия 0x80005000 с использованием библиотек System.DirectoryServices.AccountManagement - PullRequest
1 голос
/ 06 сентября 2010

Я пытаюсь написать что-то, что (помимо прочего) добавляет пользователя в группу AD - используя VS2010, .Net4 и библиотечные средства в System.DirectoryServices.AccountManagement.

Я получил пользователя и группу по коду, как в примере ниже, и это работает для других операций, таких как включение или отключение учетных записей.

group = System.DirectoryServices.AccountManagement.GroupPrincipal.FindByIdentity(_UserContext, Name);

user = System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(_UserContext, Name);

Теперь пытаемся добавить пользователя в группу как:

group.Members.Add(user);

Я получаю сообщение об ошибке, начиная с трассировки стека, как показано ниже, с ошибкой взаимодействия COM 0x80005000 (неизвестно). Это также происходит с другими пользователями и на 32- и 64-битных сборках. При поиске в Интернете возникает несколько вопросов на форуме, но я не могу найти ответы. Теоретически, это должно работать - этот пример кода проекта делает то же самое.

Кто-нибудь видел эту ошибку или имеет представление о том, что могло ее вызвать?

Верх трассировки стека:

Unhandled Exception: System.DirectoryServices.AccountManagement.PrincipalOperati
onException: Unknown error (0x80005000) ---> System.Runtime.InteropServices.COME
xception: Unknown error (0x80005000)
   at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
   at System.DirectoryServices.DirectoryEntry.Bind()
   at System.DirectoryServices.DirectoryEntry.get_AdsObject()
   at System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne
)
   at System.DirectoryServices.DirectorySearcher.FindOne()
   at System.DirectoryServices.AccountManagement.ADStoreCtx.IsMemberOfInStore(Gr
oupPrincipal g, Principal p)
   --- End of inner exception stack trace ---
   at System.DirectoryServices.AccountManagement.ADStoreCtx.IsMemberOfInStore(Gr
oupPrincipal g, Principal p)
   at System.DirectoryServices.AccountManagement.PrincipalCollection.ContainsNat
iveTest(Principal principal)
   at System.DirectoryServices.AccountManagement.PrincipalCollection.Contains(Pr
incipal principal)
   at System.DirectoryServices.AccountManagement.PrincipalCollection.Add(Princip
al principal)
   at System.DirectoryServices.AccountManagement.PrincipalCollection.Add(UserPri
ncipal user)

Ответы [ 2 ]

2 голосов
/ 23 октября 2011

Просто наткнулся на это и заметил, что пример проекта кода явно использовал имя домена при создании контекста (вместо использования null). Я изменил свой код, чтобы явно указать доменное имя, и теперь оно работает нормально - я могу сгруппировать.Members.Add (user) без проблем.

2 голосов
/ 25 ноября 2010

Я также столкнулся с той же проблемой с (экземпляр GroupPrincipal) .Members.Add (экземпляр UserPrincipal).

Обходной путь (в IronPython) довольно прост благодаря методу GetUnderlyingObject.

de = group.GetUnderlyingObject
# Group member DNs are kept in 'member' attribute in LDAP
de.Properties['member'].Add(user.DistinguishedName)
de.CommitChanges() # Save your work
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...