Проблема с записью в реестр в разных версиях Windows

#winapi #registry

#winapi #реестр

Вопрос:

Проблема: мне нужно создать разделы реестра в моем простом приложении (проект 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. Возможно, в Windows XP вы можете использовать HKLM, а в Windows 7 — HKCU?

2. В этом вся цель, вы не можете выполнять запись в HKLM, если у вас недостаточно прав.

3. @Grim В настоящее время мой код организован так, как вы описываете: для XP HKLM и для Vista / Win7 я использовал HKCU, но я думаю, что это неправильный выбор… Я думаю, что я попытаюсь использовать INI-файлы для этой цели!

4. Если это так, вам следует использовать все, что предложил Алекс К.

Ответ №1:

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

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