从ATL exe服务器(COM)调用.NET GUI

从ATL exe服务器(COM)调用.NET GUI,.net,com,atl,out-of-process,.net,Com,Atl,Out Of Process,我们有以下情况: 一个ATL COM服务器(进程外,EXE),它承载具有连接点的COM对象。 这些对象“生活在”单个(exe)进程中,它们触发事件(使用fire_*方法),以便其他进程(例如:不同进程中的.NET GUI应用程序,ATL exe服务器的“客户端”)可以捕获这些事件并作出相应的反应 目前,我们有一个.NET应用程序(Windows窗体),它是ATL服务器的客户端。启动时(双击),它会将一些委托(事件处理程序)附加到ATL服务器中托管的COM对象事件(连接点)。每次从ATL服务器触发

我们有以下情况:

一个ATL COM服务器(进程外,EXE),它承载具有连接点的COM对象。 这些对象“生活在”单个(exe)进程中,它们触发事件(使用fire_*方法),以便其他进程(例如:不同进程中的.NET GUI应用程序,ATL exe服务器的“客户端”)可以捕获这些事件并作出相应的反应

目前,我们有一个.NET应用程序(Windows窗体),它是ATL服务器的客户端。启动时(双击),它会将一些委托(事件处理程序)附加到ATL服务器中托管的COM对象事件(连接点)。每次从ATL服务器触发事件时,.NET客户端通常会在主窗口中显示一些信息,或打开一个新窗口供用户进行交互。 此解决方案基于以下文章:(COM-.NET事件处理)

上述场景假设用户在触发事件之前实际上双击了.NET客户端(exe),即显式打开了.NET应用程序。如果.NET客户端未打开(实例化),则激发的事件将“丢失”-没有客户端处理它

我们希望出现以下情况:

从ATL服务器触发事件时,应立即出现一个窗口(弹出窗口),供用户进行交互(例如:填写电子邮件文本框并按“确定”),而无需在所有操作之前显式启动.NET客户端。这样,用户将收到关于每个事件的通知,并可以交互地对其作出反应

我们研究了将.NET客户端应用程序作为ATL服务器内的dll宿主的选项,但我已经了解到,从ATL EXE显示GUI是一个很大的“禁忌”(任何GUI,而不仅仅是WinForms或WPF之类的.NET GUI)

当服务器和客户端在两个不同的进程中运行(并且“客户端”尚未运行)时,这是否可能? 有人遇到过同样的问题吗?问题解决了吗(以及如何解决)

谢谢;-)

奥姆里


有解决办法吗?

你不能按照你描述的方式来做。如果没有人听这个事件,那么就没有办法回应它。通过在启动文件夹中使用快捷方式启动.NET应用程序,可以轻松解决您的问题,这样用户登录时该应用程序始终运行。在收到服务器的通知之前,不必创建窗口。顺便说一句,把焦点偷走是行不通的,所以你可能需要一个带气球的NotifyIcon。

谢谢!我想我无法逃避“创业捷径”的事情。。。。