Запись в реестр проблемы на разных версиях Windows - PullRequest
1 голос
/ 30 мая 2011

Проблема : мне нужно создать ключи реестра в моем простом приложении (проект MS VC ++), но это простое приложение может работать в разных режимах:

  • если я запускаю его с WinXP, он запускается как сервис
  • если я запускаю его с Vista или Win7, он запускается как окно консоли

На WinXP я мог установить службу, а также написать в раздел HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\. Все в порядке.

Но , когда я пытаюсь запустить свое приложение на Vista / Win7 и пытается сохранить некоторые данные в HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\ раздел реестра, я получаю сообщение об ошибке , что я не могу этого сделать.

Вопрос : Может кто-нибудь сказать мне, где я мог бы записать (создать) некоторые данные (ключи) в реестр во всех этих системах WinXP, Vista, Seven.


PS. Я не могу использовать секцию HKEY_CURRENT_USER, потому что сервисы работают над своими собственными сеансами, поэтому данные, сохраненные пользователем в HKEY_CURRENT_USER, не будут доступны сервису.

PSS. Я не могу дать администратору права на приложение для сохранения некоторых данных. Мне нужна еще одна "папка" в реестре, чтобы писать там "бесплатно".


Примеры кода:

REGKEY service(HKEY_LOCAL_MACHINE, TEXT("System\\CurrentControlSet\\Services"), KEY_READ, REGKEY::open);
REGKEY app(service, TEXT("my_application"), REGKEY::create);
// here comes error

1 Ответ

2 голосов
/ 30 мая 2011

UAC запрещает доступ к HKLM в Visa / 7/2008, поэтому без повышения административных привилегий ваше приложение не сможет получить доступ к содержащимся в нем ключам.

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

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