由于以下错误:80040154,无法检索具有CLSID {XXXX}的组件的COM类工厂。

306

我使用C#.NET开发了一个Windows服务来生成PDF报告。为了生成PDF文件,我使用了第三方的DLL。该应用程序在我的Windows XP平台上运行。当我将服务部署到64位版本的Windows Server 2008中时,出现了以下错误:

检索具有CLSID {46521B1F-0A5B-4871-A4C2-FD5C9276F4C6} 的组件的COM类工厂失败,原因是以下错误:80040154。

我使用regsvr32命令注册了DLL。我能够在注册表中看到这个CLSID。但问题仍然存在。

可能的问题是什么?


1
一个托管在同一服务器上的Web应用程序能够生成PDF文件,没有任何错误。 - gopal
大家好,我尝试了所有可能的解决方案,但仍然遇到这个错误。我已经成功地注册了程序集,但仍然遇到相同的错误。真的需要帮助... - newprogress
18个回答

3

切换到x86:

  1. 为您的解决方案创建一个设置项目。
  2. 创建完成后,转到“解决方案资源管理器”,右键单击设置项目。
    • 点击“配置管理器”。
    • 在“活动解决方案平台”组合框中单击并选择“新建”(如果没有显示x86)。
    • 从第一个组合框中选择x86,然后单击“确定”。
    • 重新生成设置项目,然后重新生成所有项目。

3
如果您正在运行网站,您也可以尝试将应用程序池设置为禁用32位应用程序(在池的高级设置中)。

2
我遇到了相反的问题,需要启用32位应用程序。 - row1

3
我发现我的问题与DLL的实际注册有关。
  • 首先,从CMD提示符中运行“Regedit.exe”(我将其安全级别提高到管理员级别,“以防万一”)
  • 然后,在Registry中搜索(单击RegEdit菜单中的“编辑/查找”或按Ctrl + F)出现在有关COM类工厂的错误消息中显示的CLSID。我的CLSID是29AB7A12-B531-450E-8F7A-EA94C2F3C05F。
  • 找到此键后,在Hive节点下选择子键“InProcServer2”,并确定右侧Regedit框架中问题DLL的文件名,显示为“默认值”。
  • 如果该文件位于“C:\ Windows \ SysWow64”(例如C:\ Windows \ SysWow64 \ Redemption.dll),则重要的是您使用“C:\ Windows \ SysWow64 \ RegSvr32.exe”文件从命令行注册该DLL,而不是默认的“C:\ Windows \ System32 \ RegSvr32.exe”文件。
  • 因此,我在CMD提示符下运行了一个命令窗口(在管理级别控制下(以防万一需要此级别),并在命令行上键入(在我的DLL情况下):C:\ Windows \ SysWow64 \ RegSvr32.exe c:\ Windows \ SysWow64 \ Redemption.dll ,然后按Enter键。
  • 关闭命令窗口(通过“退出”),然后重新启动计算机(始终使用重新启动而不是关闭然后启动,因为(奇怪的是)重新启动执行彻底的关闭和重新加载所有内容,而“关闭”和上电重新加载驱动程序和其他值的存储缓存(可能有故障)。
  • 将来注册DLL时,请记住对于存储在C:\ Windows \ SysWow64文件夹中的任何DLL,请使用SysWow64“RegSvr32.exe”,这个问题(如果是由于注册不正确引起的)就不会再次发生。

2
不错的提示,但需要注意的是,在SysWow64中注册32位DLL时,假定该DLL有一个包装器来处理64位请求。 - Fandango68

2
在我的个人案例中,问题是通过在开发者机器的Windows注册表中搜索类ID来解决的(因为问题出现在客户端PC上)。这个操作将被放置到导致问题的COM组件中:一个在我的.NET项目中引用的x86库未被注册为OCX/COM,适用于安装程序或更新程序应用。
此致

1
对于使用VSTO的任何人,对我而言问题在于缺少对office程序集的引用。如果您试图手动实例化某些VSTO对象,它也会出现。

1

已接受的答案,将目标平台更改为x86在我的情况下没有起作用!

当我安装了Visual Studio的Crystal Report和Crystal Report运行时引擎(64位)时,在我的情况下起作用!

其他一些建议是,安装32位和64位运行时引擎可以解决这个问题!

你可以试试看!

enter image description here


0
我的问题是,我在项目引用中使用了错误的MS Sync FrameWork版本(1.0)。更新到版本2.1后,错误消失了,一切又恢复正常了。

0
在我的情况下,我正在生成类似于 wordexcel 的 ms office 文件,我运行 Win+R 并执行 dcomcnfg,在 DCOM 配置中,除了选择与 OFFICE 相关的名称项(例如名称包含 ExcelWordOffice)和 打开属性,选择标识选项卡并选择交互式用户。this answer
我的错误消息显示 CLSID {000209FF-0000-0000-C000-000000000046},所以我必须尝试在 DCOM 配置中找到这个特定的 CLSID,它确实存在,然后我选择它并按照相同的步骤设置 交互式用户,然后它就可以工作了。

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