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

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

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

有什么问题吗?


当前回答

如果你正在寻找一种不需要重新编译任何CPU应用程序的方法,这里有另一种潜在的解决方案:

Locate your COM object GUID under the HKey_Classes_Root\Wow6432Node\CLSID\{GUID} Once located add a new REG_SZ (string) Value. Name should be AppID and data should be the same COM object GUID you have just searched for Add a new key under HKey_Classes_Root\Wow6432Node\AppID. The new key should be called the same as the COM object GUID. Under the new key you just added, add a new String Value, and call it DllSurrogate. Leave the value empty. Create a new Key under HKey_Local_Machine\Software\Classes\AppID\ Again the new key should be called the same as the COM object’s GUID. No values are necessary to be added under this key.

这个解决方案不是我的功劳,但它对我们很有效。查看源代码链接获取更多信息和其他评论。

来源:https://techtalk.gfi.com/32bit对象environment/——64位

其他回答

如果你正在寻找一种不需要重新编译任何CPU应用程序的方法,这里有另一种潜在的解决方案:

Locate your COM object GUID under the HKey_Classes_Root\Wow6432Node\CLSID\{GUID} Once located add a new REG_SZ (string) Value. Name should be AppID and data should be the same COM object GUID you have just searched for Add a new key under HKey_Classes_Root\Wow6432Node\AppID. The new key should be called the same as the COM object GUID. Under the new key you just added, add a new String Value, and call it DllSurrogate. Leave the value empty. Create a new Key under HKey_Local_Machine\Software\Classes\AppID\ Again the new key should be called the same as the COM object’s GUID. No values are necessary to be added under this key.

这个解决方案不是我的功劳,但它对我们很有效。查看源代码链接获取更多信息和其他评论。

来源:https://techtalk.gfi.com/32bit对象environment/——64位

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

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

这对我很有效

在VS -项目属性-在Build选项卡-平台目标=X86

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

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

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

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

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

你可以试试!