#c# #.net #windows-forms-designer
Вопрос:
Я не могу заставить часть моей формы Windows функционировать. Я не знаю, где я ошибся, потому что многие другие источники говорили, что таким образом можно добавлять пользователей в группы. Я получаю эту ошибку каждый раз:
Система.Время выполнения.Взаимодействия.Исключение COMException: «Неопределенная ошибка»
Он терпит неудачу на этой линии здесь: de.Properties["member"].Add(up);
Но я не могу понять, почему он терпит неудачу. Я также безуспешно string group = chklbADGroups.CheckedItems
пытался, поэтому вместо этого я попытался указать имя группы.
foreach (string item in chklbADGroups.Items)
{
string group = "CN=mygroup";
bool isChecked = chklbADGroups.GetItemChecked(chklbADGroups.FindStringExact(item));
string LDAP = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName;
PrincipalContext ouContext = new PrincipalContext(ContextType.Domain, LDAP);
WindowsIdentity.GetCurrent();
SearchResult results;
DirectorySearcher ds = null;
DirectoryEntry de = new
DirectoryEntry(ouContext group);
UserPrincipal up = new UserPrincipal(ouContext);
if (de != null amp;amp; isChecked == true)
{
de.Properties["member"].Add(up);
de.CommitChanges();
de.Close();
}
}
Ответ №1:
Так что я действительно все понял. Я обошел это, используя другой метод. Вместо использования цикла foreach, который проходил через каждый элемент, отмеченный в контрольном списке. (Я продолжал получать сообщение об ошибке, что список изменился и его нельзя было просмотреть во второй раз.) Я использовал цикл foreach, который перебирает все проверенные элементы, а затем помещает их в строки и помещает в список. Затем я использовал foreach, который проходит по этому списку (который не меняется), получает строки из списка и передает их участнику группы через переменную GroupName.
var checkedItems = new List<string>();
foreach (var chk in chklbADGroups.CheckedItems)
{
checkedItems.Add(chk.ToString());
}
foreach (string GroupName in checkedItems)
{
WindowsIdentity.GetCurrent();
string username = up.SamAccountName;
MessageBox.Show(GroupName);
PrincipalContext context = new PrincipalContext(ContextType.Domain, DomainName);
GroupPrincipal grp = GroupPrincipal.FindByIdentity(context, IdentityType.Name, GroupName);
if (GroupName != null)
{
grp.Members.Add(context, IdentityType.SamAccountName, username);
grp.Save();
grp.Dispose();
context.Dispose();
}
}