如何从与桌面交互的应用程序与Windows服务通信?使用.Net与服务交互的最佳方式是什么(即大多数托盘应用程序如何与其服务器通信)。如果这种方法也是跨平台的(在Mono中工作,那么我认为远程处理已经过时了?)编辑:忘了提我们仍然需要在现场支持Windows2000机器,所以WCF和任何高于.Net2.0的东西都没有。请注意,如果您计划最终在WindowsVista或WindowsServer2008上进行部署,那么目前可用的许多方法都不起作用。这是因为引入了名为“Session0Isolation”的新安全功能。大多数Windows服务现在已移动到会话0中运行,以便将它们与系统的其余部分正确隔离。对此的扩展是,第一个登录系统的用户不再位于会话#0中,而是位于会话1中。因此隔离将破坏在服务和桌面应用程序之间进行某些类型通信的代码。在服务和应用程序之间进行通信时,编写适用于Vista和Server2008的代码的最佳方法是使用适当的跨进程API,如RPC、命名管道等。不要使用SendMessage/PostMessage,因为在会话0下这样做会失败隔离。http://www.microsoft.com/whdc/system/vista/services.mspx现在,根据您的请求,您将被卡住。对于跨平台问题,我不确定是否支持Remoting。您可能需要下载并一直返回到套接字:http://msdn.microsoft.com/en-us/library/system.net.sockets.aspx注意这是托盘应用程序,而不是真正的服务如何使用管道或TCP/IP时设置通信。如果多个用户登录到机器(Citrix、RemoteDesktop),并且每个用户启动托盘应用程序“服务”,那么您可能有多个进程试图使用同一个已知端口或管道。当然,如果您不打算支持多个管道,或者如果您有真正的服务而不是在每个用户shell中运行的托盘应用程序,这不是问题。让您的服务在预定义端口上的127.0.0.1上侦听一个普通的旧TCP流套接字。从桌面应用程序连接到此端口。它很简单,而且完全跨平台。你们中有人真的尝试过使用Mono进行远程操作吗?它工作得很好。您可能会遇到一些极端情况,但这种情况的可能性很小。只需测试您的应用程序的跨平台(MS.NetMono)远程处理以捕获任何可能的故障。截至最近的Mono,2.4.2是最新的。远程处理是一种选择,但它不是跨平台的。其他一些方法是使用命名管道、IPC或内核事件。有趣的是,我要建议Remoting!Mono1.0发行说明(来自archive.org,因为缺少原始位置)提到System.Runtime.Remoting.dll作为受支持的库,但对已知问题只字不提。如果远程处理已经完成,那么您可能必须实施自己的TCP消息框架协议。Windows没有相同的UNIX域套接字用于在同一台机器上进行通信。大多数带有GUI组件的服务都以指定用户的身份运行,并允许访问桌面。这允许您通过COM或.NET访问它,但只能在本地访问(除非您想变得复杂)就个人而言,我在服务上打开一个普通的旧套接字-它是跨平台的,允许多个客户端,允许任何应用程序访问它,不依赖于为其开放的Windows安全性,并允许使用您喜欢的任何语言编写GUI(因为一切都支持套接字)。对于托盘应用程序,您需要一个简单的协议来进行通信-您还可以使用REST样式系统向它发送命令并发回XML(yuk)或自定义数据格式。以上是C#学习教程:Howtocommunicatefromaapplicationthatinteractswiththedesktop?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
