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

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

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

有什么问题吗?


当前回答

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

其他回答

有一个相关的问题,但不同,但类似的修复:

我使用64位DLL将Windows服务项目设置为“Any-CPU”。同样的错误信息。我试过很多方法,但都没用。最后,我进入项目属性-> Build,注意到项目选中了“首选32位”。不选中此选项,就不会出现更多错误。

我的猜测是windows服务期望一个32位DLL,但找不到它。

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

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

我没有更改任何编译设置。

只需在AppPool高级设置中设置“启用32位应用程序= True”。

这对我很有效

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

要更改为x86:

为您的解决方案创建一个安装项目。 创建后,转到解决方案资源管理器,右键单击安装项目。 按“配置管理器”。 点击:“Active Solution Platform”组合框,选择新建(如果没有显示x86) 从第一个组合x86中选择,然后按OK。 重建安装项目,然后重建所有项目。