2016-04-07 56 views
0

这似乎是一个热门话题,但没有一个我见过的解决方案为我工作。检索COM类工厂失败;班级未注册

我的web应用程序使用PolarZIP来处理压缩和解压缩从最终用户获取/接收的XML文件。在我的项目中没有对PolarZIP.dll的引用,在该类中没有任何使用语句来执行此项工作,但在我们的实时服务器上,该应用程序的行为正确。在当地,只要它试图实例化这个PolarZIP对象我得到这个异常:

Retrieving the COM class factory for component with CLSID {9A00B901-D104-11D4-B8F7-080030001D26} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

这是最流行的线程我能找到的:

Retrieving the COM class factory for component with CLSID {XXXX} failed due to the following error: 80040154

但设置所有我的项目中为x86构建的解决方案(而不是'任何CPU')使事情变得更糟 - 当我启动应用程序时,我得到这个新的服务器错误:

Could not load file or assembly 'OurSoftware.Business' or one of its dependencies. An attempt was made to load a program with an incorrect format.

引用此错误的大多数其他问题或者只是被标记为我上面链接的那个的重复,或者根本没有任何答案 我在我的C:\Windows\SysWOW64\文件夹中有PolarZIP.ocx,它是活动服务器上的位置(其中该软件功能正常)。

任何想法?

编辑; CLSID 9A00B901-D104-11D4-B8F7-080030001D26确实显示在注册表中是否有问题。名称:(默认),类型:REG_SZ,数据:PolarZIP控制

+0

您必须以32位模式运行您的网络应用才能使用此组件。谷歌“以32位模式运行Web应用程序”获得匹配。 –

+0

在我的应用程序使用的应用程序池中,在IIS中启用“32位应用程序”设置为“true” – sab669

+0

嗯,这不是例外说的。你强制x86,服务器不喜欢它。很难猜测为什么你会忽略你的问题这样一个重要的细节顺便说一句。移动一下,我们看不到你的屏幕。 –

回答

0

复制文件是不够的 - 您需要注册库。这通常由安装程序处理 - 复制文件通常是一个坏主意。如果您没有选择使用安装程序,请查看regsvr32.exe。很可能有需要处理的附加步骤以及需要安装的依赖关系 - 实际上,使用安装程序是迄今为止的首选选项:)

此外,请确保位数是正确的。 32位应用程序无法访问64位组件,反之亦然。

+0

我试着从命令行运行'%systemroot%\ SysWOW64 \ regsvr32 C:\ Windows \ SysWOW64 \ PolarZIP.ocx',并表示它已被成功注册,但我仍然得到了与我的帖子中描述的相同的行为,不幸的是。这很可能是一个32位的库,但我无法专门针对x86构建我的应用程序:/ – sab669

+0

@ sab669这使得它在任何地方都能正常工作变得非常奇怪。您不能在64位进程中使用32位COM库。如果这就是你所需要的,那么你必须创建一个代理32位进程来处理COM对象,我很担心。使用本机(即,本地.NET)解决方案可能是一个更好的主意。 “DeflateStream”或“ZipArchive”有什么问题? – Luaan

+0

我将不得不考虑原生解决方案,但它在现场服务器上运行,而不是在本地运行的事实是非常奇怪的。不过,我不知道该设置的完整内容。这家公司还比较新(<1年)。不知道为什么他们在很多年前决定使用这个库时就做出了这样的决定。但是,也许我可以考虑一下本地.NET解决方案,以了解我需要做什么,而不是试图弄清为什么我不能使用这个库。我需要做的就是接受一个zip文件,解压缩它,然后验证里面的XML文件。 – sab669

-1

您是否使用'Depends.exe'检查是否缺少任何相关库?

相关问题