目前的配置是:
- 主应用程序是非托管的。
- 它包含DLL,包含TLB,描述函数,暴露给COM模型。
- 为了支持 ASMX Web 服务,它加载 .NET 框架,并启动为 Web 服务调用提供服务的 ASP.NET 域。
- 为了提供 Web 服务调用,它需要来自主应用程序的数据。因此,我们从 TLB 生成 Interop 程序集(使用 tlbimp.exe),Web 服务程序集使用此 Interop 与主应用程序中的 COM 对象进行通信。
一切正常,直到我们遇到版本问题。当同一台计算机上安装了 2 个版本的应用程序(包含 2 个版本的 TLB)时,两个版本的 TLB(例如,2.0 和 2.1)都已注册,并且较低版本停止工作。ProcessMonitor 显示,当尝试调用 2.0 版实例的 Web 服务时,它会在注册表中查找 TLB 的 GUID,读取所有带有版本号的子键,获取最后一个版本 (2.1) 并开始读取其内容。之后,它读取 2.1 版的 DLL,并且无法在自己的进程内进行 COM 调用 - 据我所知,由于编组问题。
如何制作不需要存在 TLB(至少存在已注册 TLB)的互操作来进行进程内 COM 调用?
提前致谢。