我有一个带有自定义注册程序的 .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);
请帮忙!感谢