Vista + VB.NET - доступ запрещен во время записи в HKEY_LOCAL_MACHINE - PullRequest
1 голос
/ 30 марта 2009

Я хочу, чтобы моя программа могла редактировать значения в разделе реестра, который находится в 'HKEY_LOCAL_MACHINE'

    My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\XYZ", "MyValue", "MyData")

Вышеописанное прекрасно работает в Windows XP, но в Vista выдает исключение UnauthorizedAccessException.

Ответы [ 3 ]

8 голосов
/ 30 марта 2009

Вы используете функцию UAC в Vista. Это не позволит вам писать в произвольные места в кусте HKLM, потому что вы не работаете с правами администратора.

Есть два способа обойти эту проблему

  1. Запустить программу с правами администратора (отличается от запуска программы в качестве учетной записи с правами администратора)
  2. Выберите другое место, возможно, HKCU, для хранения данных

Второй вариант намного лучше, так как он позволяет вашему приложению работать с привилегиями, не относящимися к администраторам, которые вы не всегда можете себе позволить.

Вот довольно подробная статья об UAC. Это не 100% программный материал, но он дает хорошее объяснение того, что это такое, и, надеюсь, вы можете связать это с вашей конкретной программой: http://technet.microsoft.com/en-us/library/cc709691.aspx

2 голосов
/ 30 марта 2009

Поскольку изменения в кусте локального компьютера могут влиять на всю систему, вы обнаружите, что изменения в нем разрешены только пользователям без прав администратора. Если вы попытаетесь запустить тот же код на компьютере с XP без учетной записи администратора, вы получите ту же ошибку. В Vista, поскольку процесс по умолчанию не является администратором, вы получаете эту ошибку. Информация об этом содержится в рекомендациях по сертификации «Сделано для Windows 2000», «Сделано для Windows XP» и «Сделано для Windows Vista».

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

0 голосов
/ 30 марта 2009

Vista имеет более жесткие ограничения в отношении учетных записей администратора. Если вы не вошли в систему как учетная запись администратора, вам нужно будет написать HKEY_CURRENT_USER, а не HKEY_LOCAL_MACHINE

ИМО, это имеет больше смысла. У каждого пользователя есть свои настройки / etc для своих программ. Если вы хотите, чтобы установили глобальные настройки для вашей программы, вам придется сделать это с учетной записью администратора.

...