2015-07-15 3 views
0

Прошу прощения за то, как открыто закончилось. Я уверен, что это закончится. Я попытаюсь разбить это на управляемые куски.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

+0

aaaaand момента, когда я размещаю это, у меня был друг предлагает удостоверяясь .net 4,5. * facepalm * почему я не подумал об этом первым ?! Пока что нет твердого ответа (нужно повторить тест), но пока это лучший результат. – Jim

ответ

0

Да, это была версия .net. Наше изображение начинается с .net 4.0. Бросок 4.5.2 на него очищает его прямо вверх. Я бы ожидал ошибки во время выполнения, но, думаю, нет.

... Я покажу себя из

Смежные вопросы