#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
, созданном вашим установщиком с соответствующими разрешениями.