Win32 API调用RegisterTypeLib()用于创建注册类型库所需的注册表项。
不幸的是,在Windows XP上,它尝试将这些注册表项条目写入
HKEY_CLASSES_ROOT\TypeLib
而不是
HKEY_CURRENT_USER\Software\Classes\TypeLib
意味着标准用户将无法运行ActiveX。
2008年5月,Microsoft发布了hotfix for Vista来解决此问题 - 但问题仍然存在于Windows XP上。
什么是标准用户友好型开发人员?
使用专为其设计的API调用:
如果你无法修复它,那就破解它:
//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);
答案 0 :(得分:6)
看看我写的这篇博文。它将使用RegOverridePredefKey将ATL COM对象注册到HKCU而不是HKCR。您可以使用相同的技术调用RegisterTypeLib并在HKCU下正确注册
答案 1 :(得分:5)
您可以使用RegOverridePredefKey()
API将HKEY_CLASSES_ROOT
regtree映射到HKEY_CURRENT_USER\Software\Classes
: