Использование RegistryKey, RegistrySecurity и RegistryAccessRule для исправления неверных настроек реестра в Windows XP - PullRequest
2 голосов
/ 29 ноября 2010

У меня есть приложение на C #, которое я пишу для восстановления поврежденных разделов реестра во всей организации. Я пытаюсь использовать три класса RegistryKey, RegistrySecurity и RegistryAccessRule, и когда я пытаюсь использовать их, я получаю «Запрошенный доступ к реестру не разрешен». Я искал это широко и не могу найти хорошее решение.

Ключ, который я пытаюсь исправить, не имеет прав доступа к ним (см. Скриншот ниже). Они пустые и не имеют наследуемых настроек. Это не позволяет мне исправить их с помощью моего приложения, так как у меня нет разрешений, но я могу изменить разрешения для пользователя, с которым я запускаю это приложение, как будто я открываю regedit. Таким образом, я знаю, что могу добавить разрешения на сломанные машины вручную с этим пользователем, но по какой-то причине мое приложение, независимо от того, как сильно я приказываю ему поднять себя, не может получить разрешения.

Вещи, которые я пробовал:

  1. В Windows 7 это работает, когда вы запускаете приложение с UAC, щелкните правой кнопкой мыши запуск от имени администратора. Я хотел бы дублировать возможность сделать это на Windows XP с тем же кодом.
  2. Я создал манифест, используя уровень «highAvailable», а также пробовал «requireAdministrator».
  3. Я также пытался использовать утверждение "System.Security.Permissions.RegistryPermission", которое, очевидно, также повысит уровень разрешений для запуска.
  4. Я не запускаю его из общей сетевой папки, хотя я пробовал как локальную, так и сетевую, чтобы посмотреть, из какой зоны безопасности он будет работать.

Ниже показано, как выглядят разрешения: http://i.stack.imgur.com/0c99s.jpg

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 19 сентября 2012

Вы можете попробовать олицетворять учетную запись администратора из своего кода, используя P / Invoke для вызова необходимых API, как это сделал этот человек для создания класса олицетворения учетной записи:

Класс подражателя c #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...