我用c#开发了一个Windows服务。生成PDF报告。要生成PDF文件,我使用第三方dll。应用程序在我的Windows XP平台上运行。当我在Windows Server 2008 64位版本中部署服务时,我得到了这个错误:

检索的COM类工厂 带有CLSID的组件 {46521 b1f - 0 a5b - 4871 - a4c2 fd5c9276f4c6} 由于以下错误导致失败: 80040154.

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

有什么问题吗?


当前回答

我也遇到过类似的问题。

我需要在64位机器上开发的Web应用程序中使用旧的32位DLL。我将32位DLL注册到windows\sysWOW64文件夹中,使用该文件夹中的regsvr32版本。

对第三方DLL的调用在Visual Studio中的单元测试中正常工作,但在同一台机器上的IIS中托管的Web应用程序中失败,并出现80040154错误。

将应用程序池更改为“启用32位应用程序”解决了该问题。

其他回答

听起来你的服务是针对“任何CPU”构建的,导致你在使用COM组件的64位上出现错误。您需要为x86构建它。

该网站可能作为一个32位进程运行,这就是为什么它可以使用该组件。基于x86构建解决方案将迫使您的服务以32位的方式运行。

接受的答案,改变目标平台到x86没有工作在可能的情况下!

当我安装了水晶报告visual studio和水晶报告运行时引擎(64位)在我的情况下工作!

还有人建议,这个问题可以通过安装32位和64位运行时引擎来解决!

你可以试试!

我的问题是,我有错误的MS同步框架版本(1.0)在我的项目参考。更新到2.1版本后,错误消失了,生活又好了。

问题是服务器进程是64位的,而库是32位的,它试图在同一个进程(进程内服务器)中创建COM组件。要么重新编译服务器,使其成为32位,要么保持服务器不变,使COM组件处于进程外。使COM服务器脱离进程最简单的方法是创建一个COM+应用程序-控制面板->管理工具->组件服务。

对于任何使用VSTO的人来说,我遇到的问题是缺少对办公室组件的引用。如果您试图手动实例化某些VSTO对象,也会出现这种情况。