2011-02-08 43 views
0

我们有以下的情况:调用.NET GUI从ATL EXE服务器(COM)

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

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

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

我们希望以下情况:

当一个事件从ATL服务器解雇,一个窗口应立即出现(弹出),为用户交互(例如:填写电子邮件文本框&按“确定”),而无需在所有事情之前明确启动.NET客户端。这样,用户会收到关于每个事件的通知,并且可以交互地对它作出反应。

我们研究了将.NET客户端应用程序作为一个dll托管在ATL服务器中的选项,但是我读过从ATL EXE显示GUI是一个很大的“NO-NO”(任何GUI,不只是像WinForms或WPF的.NET GUI)。

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

感谢;-)

欧米

是否有一个解决方案?

回答

1

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

+0

谢谢!我觉得我无法逃脱“启动快捷方式”的事.... – OmriSela 2011-02-13 19:05:50