Невозможно записать в реестр в разделе HKEY_LOCAL_MACHINE \ Software - PullRequest
7 голосов
/ 09 февраля 2011

Я пишу приложение, которое должно создать специальную учетную запись пользователя, скрытую от экранов входа в систему и апплета пользователей Панели управления. Записав значение DWORD 0 с именем пользователя в раздел реестра ниже, я смогу достичь этой цели:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon \ SpecialAccounts \ UserList

Проблема в том, что в Windows 7 с включенным UAC, независимо от того, что я пытаюсь, я не могу программно записать значение в ключ выше.

Насколько я понимаю, запись в определенные ключи запрещена в Windows 7 с включенным UAC, если только вы не работаете с правами администратора. Я добавил манифест приложения requestedExecutionLevel level="requireAdministrator" uiAccess="false", я принимаю приглашение UAC при запуске моей программы, моя учетная запись является членом Администраторов, но я все еще не могу записать в указанный выше раздел реестра.

Что еще мне нужно сделать? Как можно в любой конфигурации приложения записывать ключи и значения в HKEY_LOCAL_MACHINE\SOFTWARE?

Дополнительная информация ... Когда моя программа запускается, никаких ошибок не возникает, и кажется, что записываются значения. Я предполагаю, что Windows виртуализирует местоположение, в которое я пишу. Мне нужно написать фактическое местоположение, а не виртуальное, чтобы скрыть эту специальную учетную запись пользователя.

Ответы [ 4 ]

12 голосов
/ 10 февраля 2011

Возможно, программа работает как 32-разрядная программа в 64-разрядной операционной системе? В этом случае я рекомендую вам поискать значения, которые вы создали в Wow6432Node подразделе HKEY_LOCAL_MACHINE\SOFTWARE.

Подробнее о такого рода виртуализации можно прочитать здесь . Вы можете использовать KEY_WOW64_32KEY flag в некоторых API, чтобы иметь возможность работать с полным реестром без виртуализации.

1 голос
/ 23 июля 2011

Запись значения в реестр

string user = Environment.UserDomainName + "\\" + Environment.UserName;

RegistrySecurity rs = new RegistrySecurity();

rs.AddAccessRule(new RegistryAccessRule(user,
    RegistryRights.WriteKey | RegistryRights.ChangePermissions,
    InheritanceFlags.None, PropagationFlags.None, AccessControlType.Deny));

RegistryKey rk = null;
try
{
  rk = Registry.CurrentUser.CreateSubKey("SOFTWARE\\TEST", 
                                   RegistryKeyPermissionCheck.Default, rs);
  rk.SetValue("NAME", "IROSH);
  rk.SetValue("FROM", "SRI LANKA");
}
0 голосов
/ 20 июня 2012
RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",true);
rk.SetValue("Name", "Value");
0 голосов
/ 10 февраля 2011

Это может быть связано с перенаправлением, которое они добавили в Vista.Мне было бы любопытно, если бы вы попытались прочитать это значение реестра из своего кода, если бы вы вернули ожидаемое значение.Вы также можете запустить RegMon, чтобы увидеть, может ли вас перенаправить вас.

...