实例化 COM 互操作对象时:
var comObj = new ComComponentClass();
我得到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 as Administrator启动我的应用程序时,我只会收到此错误。当我正常运行时,不会发生错误。
笔记:
- 该应用程序是 64 位应用程序。
- COM 组件是 64 位 dll 中的 inproc 服务器。
关于我应该从哪里开始调查为什么会出现这种差异的任何想法?
我试过的:
我使用 Procmon 来查看它检查的注册表项。
- 在这两种情况下,通过检查密钥来定位适当的 dll
HKCU\Software\Classes\CLSID\{C343ED84-A129-11d3-B799-0060B0F159EF}\InprocServer32
- 在这两种情况下,它都会查询密钥
HKCR\CLSID\{C343ED84-A129-11D3-B799-0060B0F159EF}
并返回NAME NOT FOUND
。我觉得很奇怪(因为我可以使用regedit.exe
.