SecurityException при использовании Registry.LocalMachine.OpenSubKey - PullRequest
7 голосов
/ 24 марта 2009

Я разрабатываю приложение, которое необходимо записать в реестр. Он отлично работает в XP, но когда я запускаю его в Vista из Visual Studio, я получаю исключение безопасности в:

Registry.LocalMachine.OpenSubKey («ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ», true);

Я пытаюсь записать новый ключ в эту ветку реестра.

Какой правильный способ сделать это, во-первых, чтобы я мог запускать свое приложение из VS в Vista, а во-вторых, чтобы у моих пользователей не возникало проблем, работающих в Vista.

Спасибо ...

Ответы [ 5 ]

10 голосов
/ 24 марта 2009

На XP и Vista вам необходимы права администратора для написания нового ключа в LocalMachine.

Вы обнаружите, что это работает в XP и не работает в Vista из-за различных настроек учетной записи по умолчанию.

Быстрое и грязное решение состоит в том, чтобы обеспечить, что ваше приложение работает с правами администратора в обоих случаях, хотя в Vista это обычно вызывает недовольство.

Лучшим решением было бы немного изменить дизайн - может ли новый суб-ключ быть записан вашим установщиком (который работает с правами администратора), или вы можете хранить свою информацию где-то еще?

7 голосов
/ 24 марта 2009

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

Ваши варианты:

  • Используйте взамен Registry.CurrentUser, если настройка для каждого пользователя.
  • Запустите ваше приложение от имени администратора
  • Ослабьте ACL на ключе, чтобы кто-нибудь могу написать - что однозначно не рекомендуется, так как любая вредоносная программа на коробке можно поджарить ключик.
2 голосов
/ 24 марта 2009

Вы можете писать на этот ключ, только если вы работаете от имени администратора. Поэтому вам нужно будет запускать VS от имени администратора, а пользователям - от имени администратора.

Я бы посоветовал узнать, действительно ли вам нужно писать в LocalMachine. Вы можете писать в CurrentUser без прав администратора.

1 голос
/ 24 марта 2009

Я предполагаю, что это "работает под XP", потому что все запускают его как администратор под XP?

  • Вы можете попытаться обойти (создать ключ во время установки или использовать ключ в CurrrentUser или что-то).

  • Вы можете предоставить привилегию своему Приложению во время установки. Боюсь, мне не хватает подробностей о том, как это сделать.

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

Использовать Registry.CurrentUser

...