引子:
为了完善和改进后台监控程序,最近一直在研究Remoting技术,希望能找到Remoting的双向通讯的方法。只有实现了双向通讯,才能有效地解决监控程序和被监控程序的交互。
偶然:
在看《用框架的设计与实现——.NET平台》这本书的时候,里面有一章节”观察者设计模式 “介绍了利用Remoting技术,进行事件的注册和触发。这项技术可以用在各个程序间的互相通讯领域。但是把这项技术应用到监控中去,必须对原来的构架进行改变,即把监控程序本身作为一个客户端,来和被监控的程序通过服务端进行交互,达到监控的目的。但是因为不想对现有的程序做这么大的改变,所以当时这项技术被我pass。
绝望:
为了直观,通讯程序必须在托盘处建立图标。但是如果我把通讯程序的主窗体隐藏,因为监控程序无法找到窗体句柄,导致CloseMainWindow()函数无法正确执行,也就不能正常关闭被监控程序(通讯程序)。导致必须用Kill函数强行结束监控程序。这样托盘处的图标也就没有办法消除。
通过在网络上查找资料,发现一篇文章,彻底否定了我原来的设想。(http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=1429649&SiteID=14)
只好另想办法。
瑞星:
突然想起瑞星在更新程序的时候,会把监控服务停掉。这样瑞星的更新程序会面临和我相同的问题。查看系统服务,一个服务让我眼前一亮,那就是Rising Process Communication Center服务。估计瑞星所有的程序都是通过这个通讯服务来进行互相的交互。看来我在《用框架的设计与实现——.NET平台》书中看来的技术是解决这个问题的唯一出路了。