gpt4 book ai didi

c# - 当 "Class not registered"时,实例化 COM 组件失败并显示 "Run As Administrator"

转载 作者:太空狗 更新时间:2023-10-29 23:24:12 27 4
gpt4 key购买 nike

实例化 COM Interop 对象时:

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)).

在使用以管理员身份运行启动我的应用程序时遇到此错误。当我正常运行时,没有出现错误。

注意事项:

  • 该应用程序是 64 位应用程序。
  • COM 组件是 64 位 dll 中的 inproc 服务器。

关于我应该从哪里开始调查为什么会出现这种差异,有什么想法吗?

我尝试过的:

我使用 Procmon 来观察它检查的注册表项。

  • 在这两种情况下,通过检查 key HKCU\Software\Classes\CLSID\{C343ED84-A129-11d3-B799-0060B0F159EF}\InprocServer32
  • 找到适当的 dll
  • 在这两种情况下,它都会查询 key HKCR\CLSID\{C343ED84-A129-11D3-B799-0060B0F159EF} 并返回 NAME NOT FOUND。我觉得这很奇怪(因为我可以使用 regedit.exe 找到该 key 。但由于这在两种情况下没有区别,所以它似乎并不重要。

最佳答案

您在没有管理权限的情况下为您的本地用户帐户注册了该对象,而不是通过管理过程进行注册。因此,COM 组件在注册表的用户特定区域下注册(正如您自己指出的:HKC*U*)。

当进程在没有管理权限的情况下运行时,它会显示 HKCR 注册表的合并 View ,其中包括所有 HKCU\Software\Classes 条目以及 HKLM\Software\Classes 中尚未在 HKCU\中覆盖的任何内容软件\类。当进程以管理员身份运行时,注册表仅显示 HKLM\Software\Classes 条目。

有关详细信息,请参阅此链接: http://msdn.microsoft.com/en-us/library/windows/desktop/ms724498(v=vs.85).aspx

奇怪的是,RegSvr32 不会在 HKCU\Classes 键下注册。如果您在没有管理权限的情况下运行它,它将失败(只是在 Windows 7 中检查以确保)。 COM 组件是如何注册的?

关于c# - 当 "Class not registered"时,实例化 COM 组件失败并显示 "Run As Administrator",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15618576/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com