#windows-7 #registry
#windows-7 #реестр
Вопрос:
У меня есть одна программа, которая использует API RegCreateKeyEx и которая отлично работает на WinXP и Vista.
Программа обычно запускается с повышенными привилегиями. Когда я пытаюсь использовать ту же программу в Windows 7, RegCreateKeyEx API возвращает 5 (доступ запрещен).
Есть идеи, как это решить?
Комментарии:
1. Можете ли вы создать ключ вручную с помощью regedit.exe ? Возможно, это проблема с разрешениями. Кроме того, вы тестировали на той же платформе (32-разрядной или 64-разрядной) для упомянутых вами версий Windows?
2. Не без дополнительной информации. Где вы пытаетесь создать ключ (HKLM, HKCU)? Как вы открываете ключ? Что означает «обычно запущенный»?
Ответ №1:
Эта ошибка возникает, когда вы пытаетесь создать ключ в части реестра, где у вас нет доступа на запись. В Windows 7 это происходит практически везде.
Для повышения совместимости 32-разрядных приложений между XP / 7 рекомендуется создать ключ в 32-разрядном представлении реестра. Измените свой вызов, чтобы включить маску KEY_WOW64_32KEY
, чтобы он использовал 32-разрядное представление:
result = RegCreateKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\Foo"),
NULL, NULL, NULL, KEY_ALL_ACCESS | KEY_WOW64_32KEY, NULL, amp;hkey, amp;disposition);
Затем сначала создайте ключ в реестре вручную в HKEY_LOCAL_MACHINESOFTWAREWow6432NodeFoo
. Измените разрешения и предоставьте себе (или всем) полный контроль.
Теперь вы должны иметь возможность получить доступ к ключу из 32-разрядного приложения.
Комментарии:
1. В Windows 7 это практически везде . Неверно. HKCU является очевидным исключением. И обратите внимание, что UAC был введен в Vista, поэтому ничего важного в этом разделе не изменилось с Vista на 7. Флаги просмотра реестра редко требуются, поскольку перенаправление обычно решает это за вас. Если код запускается из 32-разрядного процесса, перенаправитель позаботится обо всем. Наконец, предположение о том, что решение включает в себя ручное создание ключа и назначение прав, не очень полезно для сайта для программистов. Реальная проблема здесь — безнадежно неточный вопрос, на который не следует отвечать.