Я пишу приложение csharp для Windows Form, которое пытается проверить наличие локальной учетной записи и, если найден, установить пароль для нее. Пара ключевых моментов:
Я делаю это для локальных учетных записей, а не для учетных записей Active Directory. Машины не являются членами домена Windows AD.
Я ДОЛЖЕН использовать setpassword, а не changepassword, поскольку для изменения пароля требуется, чтобы вы знали предыдущий пароль, чего в некоторых случаях я не знаю. Setpassword должен позволять вам выбрать новый пароль без необходимости знать старый
Приложение будет запускаться примерно 50 пользователями, использующими различные ОС от Windows XP до Windows Server 2008 R2. Поскольку я не могу предсказать, какая операционная система и версия .net будут доступны, я установил целевую платформу как .net 2.0.
В настоящее время я ожидаю, что мой пользователь будет работать от имени администратора, поэтому я не считаю, что разрешения - это проблема. Я могу создавать приложения просто отлично, я просто не могу установить пароль для существующей учетной записи.
Вот мой код:
public void VerifiyAccount()
{
String username = "specialaccount";
String password = "SuperSecretPassw0rd!";
if (CheckIfAccountExists(username))
{
MessageBox.Show("User Account all ready exists.");
SetUserPassword(password);
}
else
{
MessageBox.Show("User Account does not exist");
CreateUserAccount(username, password);
}
}
public void SetUserPassword(string newPassword)
{
try
{
DirectoryEntry hostMachineDirectory = new DirectoryEntry("WinNT://" + Environment.MachineName + ", specialaccount");
hostMachineDirectory.Invoke("SetPassword", newPassword);
hostMachineDirectory.CommitChanges();
hostMachineDirectory.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Вот ошибка, которую я получаю:
Неизвестная ошибка (0x80005000)
OK
Я не могу понять, почему я получаю вышеуказанную ошибку, и, несмотря на поиск в Google и поиск переполнения стека, я не могу найти никакого объяснения. Большинство примеров, которые я могу найти, связаны с подключением к Active Directory, а не с локальными учетными записями. Или используете новые возможности .net 4.0. Я должен верить, что если я смогу создать учетную запись, я смогу установить пароль для учетной записи. Любые идеи или предложения о том, что я могу делать не так?
Спасибо
Бред