C# OPC自动化出现80040154错误

4

我是一名.Net开发者。刚接触OPC。当我尝试运行一些OPC客户端的示例时,所有示例都会出现这个错误。看起来似乎DLL没有注册。但我不知道该如何注册,以及在哪里注册。

error: retrieving the COM class factory for component with CLSID failed due to the following error: 80040154

我也尝试过这个


regsvr32 Interop.OPCAutomation.dll", 

但是它也会抛出错误,比如:

The module "Interop.OPCAutomation.dll" was loaded but the entry-point DllRegisterServeer was not found.
Make sure that "Interop.OPCAutomation.dll" is a valid DLL or OCX file and then try again.

我已经查看了许多现有的论坛。其中许多人说要将平台目标更改为x86,但我仍然遇到相同的问题。请注意,我只能从“项目属性”中的“生成”选项卡顶部看到“Active (Any CPU)”。

以下是我的环境详细信息:

.Net 2005
OPCAutomation Weapper
Windows 7 64-bit OS
Dell Inspiron 1525 (I hope this is not a 64bit machine, but my engineer installed 64bit OS somehow).

请帮助我。

提前致谢!


你确定你要注册的 DLL 是 OCX 吗?如果是或者它是一个非托管的 COM DLL,请尝试使用 regsrv32 进行注册。否则,你只需要添加对该 .dll 的引用即可。如果这不起作用,那么重新编译项目并将 .x86 设置为 x64。 - MethodMan
@DJKRAZE 感谢与我共度的时光。我不确定这个 DLL 是否为 OCX,但它是大家都在使用的常见文件。我已经下载了一个包括此 DLL 文件的示例项目。我也尝试了 regsrv32,但出现了上述错误。我已经添加了对 DLL 的引用并进行了检查,但没有任何改变。最后像你说的那样,我将目标设置为 x64 并尝试了一下,但没有改善。 - Abu Sithik
你的操作系统是什么?是32位还是64位?另外,GAC中的Interop.OPCAutomation.dll是否已经被添加到了GAC中? - MethodMan
我的操作系统是64位的。我对GAC一无所知。非常抱歉,求帮助。 - Abu Sithik
有一个 GAC 实用程序,您可以使用它将 DLL 注册/添加到全局程序集缓存中。请在 Google 上搜索 GAC。 - MethodMan
嗨@DJKRAZE,当我尝试将"Interop.OPCAutomation.dll"添加到程序集时,它显示以下错误:"向缓存添加程序集失败:尝试安装一个没有强名称的程序集"。 - Abu Sithik
6个回答

5

如果有人遇到这个问题(就像我最近遇到的那样...),我已经解决了!经过一段时间的研究,我发现这与在64位计算机上运行.NET框架有关。只要.NET应用程序仅使用32位CLR,我们必须将.NET框架设置为在WOW模式下加载CLR。为此,请输入:

C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\Ldr64.exe SetWow

在此之后,您应该能够运行这些应用程序。

如果您想将.NET Framework还原为以前的状态,可以输入以下命令:

C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\Ldr64.exe Set64

1
如果使用OPC Client Toolkit SDK (C++),远程注册表服务可能会出现问题,导致出现此错误。
在Windows 7上,默认情况下,远程注册表服务设置为手动启动而未启动。请确保在要部署的所有计算机上启动远程注册表服务。这可以手动完成或使用组策略。
函数GetCLSIDFromRemoteRegistry()使用RemoteRegistryService获取OPC服务器的CLSID。如果客户端计算机上未启动此服务,则OPC程序可能返回错误码80040154。

对于其他OPC客户端,如果远程注册表服务未运行,则需要手动指定ClsId。 - mstrthealias

0

OPC dll 只能在 32 位系统中运行,我的解决方案是在 IIS 中相关应用程序池的高级设置中将“启用 32 位应用程序”更改为 True。

App Pool

Advanced definition of APP pool in IIS


0

虽然这是一篇旧帖子,但我想分享我的解决方案。

我的问题是,当我尝试使用OPCAutomation.dll安装应用程序时,它给了我80040154错误,因为该类未注册。

这是我的解决方案,始终使用管理员权限:

  1. 将OPCDAAuto.dll复制到“C:\ Windows \ System32”文件夹中
  2. 在cmd提示符上键入“C:\ Windows \ System32 \ regsvr32 opcdaauto.dll”
  3. 您应该看到像这样的消息: image

希望这可以帮助!


0

这个问题有点过时了,希望你现在已经解决了,但是我遇到了完全相同的问题,想分享一下我的解决办法。在我的情况下,我正在使用Kepware服务器。如果你编译并尝试在没有安装该服务器的机器上使用Interop.OPCAutomation运行客户端应用程序,你会收到一个dll未注册错误,并且如果你尝试手动注册dll,会出现"找不到入口点"的错误。

解决方案:确保你已经安装并且运行了服务器。


0

你遇到的错误很可能是由于OPC服务器未正确注册导致的。确保它已经注册(通常通过在命令行中使用“/regserver”或“/service”参数运行)。也可能存在安全性问题,此时你需要运行'dcomcnfg'(DCOM配置)以确保客户端可以访问服务器。


他认为包装器就是服务器。你可能想要进一步解释一下。 - Hans Passant
我已经查看了DCOM配置。我可以看到系统的许多组件。是否有任何特定的组件需要检查OPC服务器的权限? - Abu Sithik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接