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

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

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

有什么问题吗?


当前回答

你不需要配置你的项目属性平台目标X86。 你也可以这样配置iis选项,让它在x86上工作

选择应用程序池 选择应用程序使用的池 高级设置 启用32位应用程序为true

其他回答

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

windows 2008服务器x64的解决方案是:

以管理员权限打开cmd.exe。 将dll拷贝到C:\Windows\SysWOW64文件夹 从C:\Windows\SysWOW64运行regsvr32 验证dll在Windows注册表中。 如果你有一个使用dll的。exe x86, exe必须在x86模式下编译。 exe必须安装在C:\Program Files (x86)文件夹中。

这个程序是有效的,是可以的

要更改为x86:

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

我遇到了同样的问题,但其他答案只提供了解决方案的一部分。

解决方案有两个方面:

从寄存器中删除64位。

c:\windows\system32\regsvr32.exe /U <file.dll> 这将不会删除对其他文件夹中复制的dll的引用。

or

找到名为HKEY_CLASSES_ROOT\CLSID{......}\InprocServer32的密钥。该键将DLL的文件名作为其默认值。 我删除了HKEY_CLASSES_ROOT\CLSID{......}文件夹。

将其注册为32位:

C:\Windows\SysWOW64\regsvr32 <file.dll>

将其注册为32位而不删除64位注册并不能解决我的问题。

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

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

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

你可以试试!