// Редактировать:
Ух ты. Странно, что я работал над этим уже целый день и просто понял, что мне нужно сделать:
key = key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true);
А потом все заработало. Я не знал, что ты должен был сделать это. Спасибо всем, кто откликнулся. Я просто возился, искал свой ключ и заметил, что его кладут не в том месте.
// Оригинальный вопрос:
Я не видел работающего решения для этого, и я не уверен, что это ошибка.
У меня есть 32-битная служба Windows C #, работающая в 64-битной Windows 7. Моя цель - записать в 64-битный реестр, а не в подраздел Wow6432Node, поскольку для AutoAdminLogon 64-битная система, похоже, не проверяет 32-битное представление ключей.
Итак, мой код выглядит следующим образом:
static public void LoginAsGuest(EventLog eventLogger)
{
RegistrySecurity userSecurity = new RegistrySecurity();
RegistryAccessRule userRule = new RegistryAccessRule("Everyone", RegistryRights.FullControl, AccessControlType.Allow);
userSecurity.AddAccessRule(userRule);
var key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", RegistryKeyPermissionCheck.ReadWriteSubTree);
if (key == null)
{
eventLogger.WriteEntry("Error accessing the registry key");
}
else
{
try
{
key.SetValue("AutoAdminLogon", "1", RegistryValueKind.String);
key.SetValue("DefaultUserName", "guest", RegistryValueKind.String);
key.SetValue("DefaultPassword", "password", RegistryValueKind.String);
}
catch (Exception exception)
{
eventLogger.WriteEntry("Problem setting up keys: " + exception);
}
}
key.Close();
Reboot();
}
Нет исключений или выдается ошибка. Ничего не записывается в реестр в 32-битном или 64-битном представлении. Я пытался использовать:
key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true);
Но это имеет тот же результат. Теперь, если я просто пишу без просмотра, моя программа успешно записывает в подраздел:
SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Winlogon
В общем, все, что я хочу, это написать в подраздел:
SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
Кто-нибудь знает, почему вышеприведенный код не записывает запрошенный ключ? (Я укажу, что AutoAdminLogon и другие два ключа используются поставщиком учетных данных Windows по умолчанию, так что при запуске Windows он проверяет эти ключи, а если AutoAdminLogon имеет значение 1, то он автоматически входит в систему с заданными именем пользователя и паролем. I ' я делаю это, чтобы разрешить вход в систему компьютера в качестве гостя, установив ключи и перезагрузив компьютер).