我们有 2 个 COM DLL,它们的构建方式与 .NET 3.0 相同 - 一个从数据库获取数据 - 一个从 Web 服务获取数据
我们一直使用 RegAsm.exe 使用以下命令注册 DLL:
cd "C:\Program Files\Dispatcher\COM\Custom"
C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe MercatorRepositoryCOM.dll /tlb:MercatorRepositoryCOM.tlb /codebase
C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe MercatorUtilitiesCOM.dll /tlb:MercatorUtilitiesCOM.tlb /codebase
这适用于我们的大多数服务器(Win2008R2 32b)
在我们最新的服务器上,输出显示:注册成功。但是,应用程序可以访问 MercatorUtilitiesCOM.dll,但不能访问 MercatorRepositoryCOM.dll。
我们尝试使用 RegAsm、regsvr32、regtlibv12 注册 DLL,甚至将它们添加到 GAC。没有任何效果。
有什么办法比“(10092) ActiveX 自动化:服务器无法创建对象。”更好地解决这个问题?有没有其他方法可以尝试注册这些 DLL?
我们尝试将日志记录添加到 DLL 代码中,但从未写入日志,因此我们可以假设 DLL 甚至没有被调用。
PS:我们别无选择,只能将这些作为 COM DLL 公开,因为我们有一个基于 VB6 的扫描/索引应用程序需要引用这些。它是 Dispatcher(对于那些可能知道它的人)。
更新:经过进一步调查,看起来 DLL 可能已经正确注册。当我们取消注册它时,我们会收到一条明确的消息,即 Dispatcher 找不到 DLL 引用。当我们注册它时,Dispatcher 打开,然后抛出 ActiveX 自动化错误。因此,似乎 DLL 已正确注册,但由于某种原因,它无法在 DLL 中实例化我的类。
解决方案:这个问题毕竟与 DLL 注册无关。显然,启动 Dispatcher 的应用程序发生了一些内部变化。它曾经将其作为子进程生成,因此它可以使用相同的 app.config,但他们将其更改为作为单独的进程运行(它是自己的可执行文件)。这意味着它无法在 app.config 中找到我们的配置和端点。我们为新的可执行文件创建了一个单独的 app.config 并且它可以工作。感谢你的帮助!