С# Изменение паролей пользователей в Windows 10

Я пытаюсь создать форму Windows, которая будет напоминать пользователям о сбросе паролей. Цель приложения — убедиться, что они подключены к VPN, а затем позволить им изменить свой пароль в этот момент, чтобы он синхронизировался с нашим доменом. Я проверил это вручную, используя конечную точку, подключенную к VPN, а затем успешно изменил пароль ctrl+alt+del. Я хотел бы реализовать эту же функцию в своем приложении. Кто-нибудь знает, как вызвать этот интерфейс, который вызывает элемент управления alt delete change password, или другую программу с той же функциональностью? Я попробовал команду net user , но у него нет надлежащих разрешений (похоже, его нужно запускать от имени администратора, что невозможно). Большинство пользователей используют Windows 10, а некоторые — седьмую и восьмую. Я был бы признателен за любые предложения, которые вы могли бы предложить.


person mberna    schedule 24.05.2017    source источник
comment
Вы хотите вызвать ctrl + alt + del или хотите фактически изменить пароль в коде?   -  person MrZander    schedule 24.05.2017
comment
В идеале я хотел бы изменить пароль в коде, а не запускать ctrl+alt+del. Причина в том, что после срабатывания ctrl, alt, del пользователь может нажать кнопку и все испортить, или это может быть другое количество нажатий клавиши со стрелкой, чтобы перейти к подсказке о смене пароля.   -  person mberna    schedule 25.05.2017
comment
Возможный дубликат: stackoverflow.com/questions/4253893/   -  person joelc    schedule 25.05.2017
comment
Спасибо, Джоэл, я не видел этого. Это прекрасно работает без прав администратора. Многие из тех, что я видел, используют аналогичные функции для онлайн-паролей. Что помогает! Если кто-то еще использует функцию ChangePassword, обязательно щелкните правой кнопкой мыши ссылки и добавьте System.DirectoryServices.AccountManager таким образом, поскольку это выдает ошибку, если вы добавите его только в начало кода с помощью команды using.   -  person mberna    schedule 25.05.2017


Ответы (1)


Спасибо @joelc за то, что обратил на это мое внимание, и @paul за оригинальный фрагмент.

Обязательно щелкните правой кнопкой мыши ссылки и добавьте System.DirectoryServices.AccountManager таким образом, поскольку это дает ошибку, если вы добавите его только в начало кода с помощью команды using.

Вот код, который у меня получился.

Это идет вверху:

using System.DirectoryServices.AccountManagement;

Это происходит везде, где вы хотите, чтобы пароль был изменен, то есть при нажатии кнопки:

try
{
    using (var context = new PrincipalContext(ContextType.Domain, "website.net"))
    using (var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, usernameTextBox.Text))      
    user.ChangePassword(oldPasswordTextBox.Text, newPasswordTextBox2.Text);
    MessageBox.Show("Password Changed");                        
}
catch (Exception e2)
{
    MessageBox.Show(e2.ToString());
}
person mberna    schedule 26.05.2017