2010-02-10 88 views
2

我试图更新VB6的DLL并重新部署一个.NET服务后,但我发现了以下错误:部署.NET服务更新COM DLL

System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {D01BF589-BC04-4119-8168-AE6180BBD021} failed due to the following error: 80040154.

我的步骤考虑部署如下:

  1. 编译VB6 COM DLL
  2. 注册目标机器
  3. 使用的COM DLL tblimp创建的Interop DLL
  4. 添加此互操作DLL的.NET项目
  5. 重新编译该项目,并安装
  6. 运行在目标计算机上安装程序(这在以前没有安装该服务)

任何想法?

回答

0

你确实已经在目标机器上安装了VB运行库,并且它有相关的辅助支持文件?你在dll上运行regsrvr32吗?您是否检查过TypeLib以查看它是否位于目标机器的注册表中?

希望这会有所帮助, 最好的问候, 汤姆。

+0

我搜索了注册表,发现DLL在不同位置注册了两次。事实证明,在TypeLib下注册的DLL是旧的。我注销了这两个DLL,然后注册了正确的一个。现在正在工作。谢谢! – marekc 2010-02-10 03:19:24

0

您可能会错过您的COM对象在目标计算机上所需的其他dll。 sysinternals中的'listdlls'和'procexp'可能有助于识别缺少的内容。 .NET也许试图强制它作为一个64位应用程序运行。使用/ 32bit +开关运行corflags可能会有所帮助。

1

错误代码0x80040154翻译为REGDB_E_CLASSNOTREG这意味着“类未注册”,所以我猜你的课没有注册。您应该在注册表下的HKEY_LOCAL_MACHINE \ CLSID下查找,并确保您的注册没有失败,并且它实际上指向您的dll。