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

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

其他回答

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

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

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)文件夹中。

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

在我个人的情况下,这个问题是固定的搜索类id在Windows的注册表上的开发机器(因为这个问题是抛出在客户端PC)。该操作将被放置到引起问题的COM组件中:我的. net项目中引用的x86库没有为安装程序或更新程序应用程序注册为OCX/COM。

问候

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

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

这对我很有效

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