【问题标题】:Error running application that depends on WMI运行依赖于 WMI 的应用程序时出错
【发布时间】:2011-09-17 19:08:28
【问题描述】:

我刚刚开发了一个使用 system.manament 类的应用程序,但我的朋友在使用该应用程序时遇到了问题,因为它给出了错误。他和我一样安装了 winxp sp3 和 .Net framework 2.0。

System.TypeInitializationException: The type initializer for

'System.Management.MTAHelper' 引发异常。 ---> System.Runtime.InteropServices.COMException (0x80040154):正在检索 具有 CLSID 的组件的 COM 类工厂 {A8F03BE3-EDB7-4972-821F-AF6F8EA34884} 由于以下原因而失败 错误:80040154。 在 System.Management.MTAHelper..cctor()

如何部署此应用程序以确保存在 wmi? 可能是什么问题?

【问题讨论】:

  • 请注意,我在我的应用程序中引用了system.management.dll 并导入了system.management。我必须在我的应用程序中部署和注册这个 dll 吗?
  • 您无法部署和注册这些 DLL。它们是 .NET 框架的一部分,因此您必须完整安装框架的正确版本。 (它们可能依赖于其他不匹配的 DLL,依此类推。)

标签: .net deployment wmi


【解决方案1】:

确保 WMI 正在运行。在命令行中:

net start winmgmt

如果您将应用程序作为 Windows 服务分发,您可以在服务安装期间添加 dependency on WMI。也值得关注this

所以我去了 HKCR\CLSID{A8F03BE3-EDB7-4972-821F-AF6F8EA34884}\InprocServer32(默认) 在我的 x64 环境中,看到了以下路径: C:\Windows\system32\mscoree.dll。

客户更改了他在其中找到的 C:\WINDOWS\SysWOW64\mscoree.dll 路径 在那里,他没有再次得到错误。

如果您将注册表搜索为 Ken White suggests 并且它没有“HKCR\CLSID{A8F03BE3-EDB7-4972-821F-AF6F8EA34884}”,则可能值得重新安装 .NET。也可以看看this

【讨论】:

  • 这是错误的。显示的HRESULTclass not registered。未运行的服务不会导致它。在 google 上搜索“HRESULT 0x80040154”进行多次讨论。
  • @ken 请查看我的评论。
  • 关于部署,您不应分发任何额外的 dll。 System.management 是 .NET 的一部分,您已经依赖于 .NET。如果在注册表中找不到 A8F03BE3-EDB7-4972-821F-AF6F8EA34884,请尝试重新安装 .NET。
【解决方案2】:

消息中给出的0x80040154HRESULT错误表示使用的COM类未在系统上注册。 (这也可能意味着依赖类未注册;您的 COM 类无法解析依赖关系并返回此错误代码,从而引发异常。)

您机器上安装的操作系统或框架与您朋友的机器上安装的操作系统或框架之间存在明显差异。我们无法告诉您它们可能是什么,因为您没有发布任何代码。您可以通过在计算机上的 Windows 注册表中搜索错误消息 ({A8F03BE3-EDB7-4972-821F-AF6F8EA34884}) 中显示的 CLSID 来开始跟踪它。

【讨论】:

  • +1 指出未运行 WMI 服务不可能是问题的原因。
猜你喜欢
  • 2020-09-11
  • 2023-01-12
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
相关资源
最近更新 更多