1

我有一个带有自定义注册过程的.NET COM dll ,因此它在HKEY_CURRENT_USER\Software\Classes下注册,与HKEY_LOCAL_MACHINE相反。所以有以下键(当前用户是 Windows 7 PC 上的管理员):

HKEY_CURRENT_USER\Software\Classes\My.ProgId\CLSID
HKEY_CURRENT_USER\Software\Classes\CLSID\{XYZZYZYZYZ-YZYZY-ZYZYZY} etc

如果我构建一个简单的 C++ 客户端:

hr = CLSIDFromProgID(OLESTR("My.ProgId"), &clsid); 

并在没有UAC 提升 (Windows 7)的情况下运行它,它会成功创建组件。另一方面,如果我在海拔高度上运行,它会以Invalid class string.

我用进程监视器进行了检查,当它工作时,它会查找HKCU\Software\Classes\My.ProgID键并且打开正常。当它失败(海拔高度)时,它会查找HKCR\My.ProgId和错误NAME NOT FOUND。但是,手动打开注册表项classes_root是成功的:

HKEY key;
RegOpenKey( HKEY_CLASSES_ROOT, _T( "My.ProgId"), &key);

请帮忙!谢谢

4

0 回答 0