使用CLSID检索组件的COM类工厂(AD37B7D5-B5A3-460A-8FFB-3C71984A4537}失败,原因如下: 80040154。
例外细节:
System.Runtime.InteropServices.COMException:使用CLSID检索组件的COM类工厂(AD37B7D5-B5A3-460A-8FFB-3C71984A4537}失败,原因如下: 80040154。
我在我的ASP.NET网络应用程序中使用了一个COM。我已经成功地让它在我自己的开发机器和构建机器上运行。
但是,当我尝试将项目部署到另一台计算机( 2003 R2)时,会出现上述错误。
我已经使用regsvr32命令注册了COM。它说DLL已成功注册。
我正在用ASP.NET版本3.5在Visual 2008中开发这个项目,并将我的项目构建为在任何CPU上运行,每台机器都使用64位的Windows。我正在使用IIS版本6.0。
(我已经尝试让IIS运行32位应用程序,这导致web应用程序不可用。)
我编写了一个Windows脚本文件来检查COM DLL是否在工作(即独立于项目)。这个脚本在我的构建机器和我自己的开发机器上都运行得很好。
但是,它没有在我遇到问题的机器上正常运行( 2003 R2)。我要做的是使用以下命令(我找到了这里)从命令行运行脚本:
C:\WINDOWS\SysWOW64\wscript.exe COMtest.js
当以这种方式运行时,wscript文件会成功地工作。
我猜想这与COM DLL的版本有关。
是否需要在Visual项目中启用某些设置?
(请注意,我自己还没有构建COM DLL。是别人造的,把它给了我。)
发布于 2011-03-07 14:46:22
我通过为dll创建一个COM+应用程序来解决这个问题。
发布于 2011-03-03 13:08:32
这是COM的FileNotFound错误。在这种情况下,它很可能是一个比特问题。注册表将32位服务器和64位服务器的COM注册分开。当您从wscript.exe目录运行syswow64时,它强烈地表明了这一点,这是32位可执行文件的主目录。64位进程将无法在注册表中找到32位服务器。它也不能使用它。通过运行c:\windows\system32\wscript.exe来复制它
您首先必须构建COM服务器的x64版本,以便64位进程可以使用它。然后,您必须将其注册到Regsvr32.exe的64位版本,即c:\windows\system32 32中的版本,而不是syswow64。如果仍然有问题,请使用SysInterals的ProcMon实用程序来查找进程在注册表和文件系统中的位置。
或者让IIS以32位模式运行.这是另一个需要不同标签的问题。
发布于 2013-06-27 18:12:35
当使用第三方.dll文件时,我收到了80040154错误。最后,我发现这个错误是由于尝试API禁止的调用的结果-- Visual使我认为它们会很好。因此,一个答案可能是检查您的API调用是否正确使用dll文档,即RTFM!
我想补充一下,因为这样可以节省一些宝贵的时间。
https://stackoverflow.com/questions/5179280
复制相似问题