C# - Не удается проверить пользователя локального компьютера, когда ".\" Предварительно добавляется с именем пользователя

Я использую библиотеку System.DirectoryServices.AccountManagement для проверки локального пользователя.

У меня есть следующий код:

  private bool IsValidWindowsUser(string userName, string password)
  {
       using (var p = new PrincipalContext(ContextType.Machine))
            return p.ValidateCredentials(userName, password);
  }

Но всякий раз, когда я передаю правильное имя пользователя с ".\" Preappend, например, если имя пользователя - "test", и если я передаю имя пользователя как ". \ Test", то это дает мне исключение

The network path was not found.

Может кто-нибудь, пожалуйста, помогите мне. Если я удаляю ".\", То он работает нормально.

Мое другое условие - я хочу только проверить пользователя Локального компьютера, а не пользователя домена.

Пожалуйста помоги

1 ответ

Вот что у меня получилось, на случай, если у кого-то есть аналогичная проблема.

 string GetLogin(string s)
    {
        string regex = @"^(.*\\)?([^\@]*)(@.*)?$";
        return Regex.Replace(s, regex, "$2", RegexOptions.None);
    }

using (PrincipalContext pcLocal = new PrincipalContext(ContextType.Machine))
            {
                try
                {
                            try
                            {
                                if (null != group && pcLocal.ValidateCredentials($".\\{username}", password))
                                {
                                    return GetLogin(findByIdentity.SamAccountName);
                                }
                            }
                            catch (Exception)
                            {
                                string user = GetLogin(username);

                                if (null != group && pcLocal.ValidateCredentials(user, password))
                                {
                                    return GetLogin(findByIdentity.SamAccountName);
                                }
                            }

                }
                catch (Exception e)
                {
                    throw e;
                }
            }

Попробуй это:

p.ValidateCredentials(Environment.MachineName + "\\" + userName, password);
Другие вопросы по тегам