Прошу прощения за то, как открыто закончилось. Я уверен, что это закончится. Я попытаюсь разбить это на управляемые куски.C# Несогласованное членство в группе безопасности
Я пишу программу, которая занимается SCCM. Эта программа заблокирована группами безопасности. Если вы не являетесь участником группы «Операторы сервера», вы не можете войти. Простой. Я некоторое время тестировал свою машину dev (Dell, работающую по беспроводной сети) без проблем. Когда я выпустил бета-версию, я обнаружил, что при определенных обстоятельствах программа не будет собирать членство в группе безопасности пользователя и, следовательно, запрещает доступ. Я смог воспроизвести проблему, кажется, что машины по беспроводной сети имеют такую проблему. Хотя, это сложнее, чем это.
-Freshly изображаемой машина, кажется, этот вопрос
-на всех беспроводных машин; моя машина dev является беспроводной
-Одно настольный компьютер (без беспроводной связи) имеет эту проблему. (Это на удаленном сайте, поэтому я не могу разобрать это отдельно) Я думаю, что это тоже свежий образ. Тем не менее, я тестировал другой компьютер на том же сайте - отлично работал.
-Подключение к сети Ethernet, похоже, имеет эффект - 75% времени, когда оно исправляет проблему как-то - после небольшого ожидания. (Работает как по сети, так и по беспроводной сети в этот момент)
Я пытаюсь получить точку останова на одной из этих машин, чтобы я мог видеть, что происходит. Проблема в том, что к моменту, когда я установил VS.net, проблема решает сам. Я знаю (очень мало) о дистанционной отладке - в настоящее время это изучается. Этот сценарий заставляет меня задаться вопросом, связано ли это с обновлением (изображение довольно современное, может быть, месяц или два?) Я также написал небольшую утилиту, которая проверяет процедуру входа в систему (используя тот же код) и обнаруживает группу безопасности каждый раз. Wat.
Код для нахождения группы безопасности пользователя: (любезно Stack :))
static bool IsUserMemberOf_(string user, string group)
{ // (I realize the user parameter is superfluous in this case)
try
{
DirectoryEntry entry = new DirectoryEntry("LDAP://" + TC.act_Domain, TC.act_AD_User, TC.enc_GetADPassword());
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = "(&(objectClass=user)(|(cn=" + TC.act_AD_User + ")(sAMAccountName=" + TC.act_AD_User + ")))";
SearchResult result = mySearcher.FindOne();
foreach (string GroupPath in result.Properties["memberOf"])
{
if (GroupPath.Contains(group))
{
return true;
}
}
}
catch (DirectoryServicesCOMException)
{
}
return false;
}
Я также попробовал другой метод (с использованием Principal.IsMemberOf()), которые имели один и тот же результат. Я также исследовал проблемы DNS/сети. Не исключая этого, но, похоже, не является фактором в тестировании, которое я сделал. Я в растерянности. Если у кого-то есть какие-то мысли, обязательно наденьте их на меня.
Thanks
aaaaand момента, когда я размещаю это, у меня был друг предлагает удостоверяясь .net 4,5. * facepalm * почему я не подумал об этом первым ?! Пока что нет твердого ответа (нужно повторить тест), но пока это лучший результат. – Jim