Mat*_*ith 5 c# com com-interop
实例化COM Interop对象时:
var comObj = new ComComponentClass();
Run Code Online (Sandbox Code Playgroud)
我明白了COMException:
Retrieving the COM class factory for component with CLSID
{C343ED84-A129-11D3-B799-0060B0F159EF} failed due to the following error:
80040154 Class not registered
(Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
Run Code Online (Sandbox Code Playgroud)
我只当我启动我的申请得到这个错误,以管理员身份运行.当我正常运行时,不会发生错误.
笔记:
关于我应该从哪里开始调查为什么会出现这种差异的任何想法?
我尝试过的:
我使用Procmon来查看它检查的注册表项.
HKCU\Software\Classes\CLSID\{C343ED84-A129-11d3-B799-0060B0F159EF}\InprocServer32HKCR\CLSID\{C343ED84-A129-11D3-B799-0060B0F159EF}并返回NAME NOT FOUND.我发现这很奇怪(因为我可以找到该密钥使用regedit.exe.但由于这两种情况之间没有区别,所以它似乎并不重要.您在没有管理权限的情况下为本地用户帐户注册了对象,而不是通过管理流程进行注册。因此,COM 组件注册在注册表的用户特定区域下(正如您自己指出的: HKC* U * )。
当进程在没有管理权限的情况下运行时,会显示 HKCR 注册表的合并视图,其中包括所有 HKCU\Software\Classes 条目以及 HKLM\Software\Classes 中尚未在 HKCU\Software\Classes 中覆盖的任何内容。当进程以管理员身份运行时,注册表仅显示 HKLM\Software\Classes 条目。
有关更多详细信息,请参阅此链接: http://msdn.microsoft.com/en-us/library/windows/desktop/ms724498 (v=vs.85).aspx
奇怪的是,RegSvr32 不会在 HKCU\Classes 密钥下注册。如果您在没有管理权限的情况下运行它,它将失败(在 Windows 7 中只需检查以确保)。COM组件是如何注册的?