Win32: Как использовать API RegisterTypeLib от обычного пользователя - PullRequest
6 голосов
/ 13 ноября 2008

Вызов Win32 API RegisterTypeLib () используется для создания ключей реестра, необходимых для регистрации библиотеки типов.

К сожалению, в Windows XP он пытается записать эти записи ключа реестра в

HKEY_CLASSES_ROOT\TypeLib

вместо

HKEY_CURRENT_USER\Software\Classes\TypeLib

Это означает, что обычный пользователь не сможет запустить ActiveX.

В мае 2008 года Microsoft выпустила исправление для Vista , чтобы исправить эту проблему - но проблема остается в Windows XP.

Что делать стандартному дружественному разработчику?


Ответ 1

Используйте специально разработанный для этого вызов API:

RegisterTypeLibraryForUser ()

Ответ 2

Если вы не можете это исправить, взломайте это:

//begin hack
HKEY key;
RegOpenKeyW(HKEY_CURRENT_USER, @"Software\Classes", out key);
RegOverridePredefKey(HKEY_CLASSES_ROOT, key);

//do original work
RegisterTypeLibrary(...)

//stop hacking
RegOverridePredefKey(HKEY_CLASSES_ROOT, null);
RegCloseKey(key); 

Ответы [ 2 ]

6 голосов
/ 13 ноября 2008

Посмотрите на эту запись в блоге, которую я написал. Это зарегистрирует ATL COM-объекты в HKCU вместо HKCR, используя RegOverridePredefKey. Вы можете использовать ту же технику для вызова RegisterTypeLib и правильно зарегистрировать ее в HKCU

Регистрация ATL как обычного пользователя

5 голосов
/ 13 ноября 2008

Вы можете использовать RegOverridePredefKey() API для сопоставления HKEY_CLASSES_ROOT regtree с HKEY_CURRENT_USER\Software\Classes:

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