首页 / 知识
关于c#:如何通过与桌面交互的应用程序与Windows服务进行通信?
2023-04-16 16:27:00

How to communicate with a windows service from an application that interacts with the desktop?使用.Net与服务进行交互的最佳方式是什么(即大多数任务栏应用程序如何与服务器通信)。如果此方法也是跨平台的,那将是更好的选择(在Mono中工作,所以我想远程处理已经完成了吗?) 编辑: 忘记了,我们仍然必须在现场支持Windows 2000机器,因此WCF和.Net 2.0以上的任何版本都将无法运行。 请注意,如果您打算最终在Windows Vista或Windows Server 2008上进行部署,那么今天可以完成的许多方法将行不通。这是因为引入了一种称为"会话0隔离"的新安全功能。 大多数Windows服务已移至现在在会话0中运行,以使其与系统的其余部分正确隔离。对此的扩展是,不再将第一个登录系统的用户放在会话0中,而是将他们放在会话1中。因此,隔离将破坏在服务和桌面应用程序之间进行某些类型的通信的代码。 在服务和应用程序之间进行通信时,当今可以在Vista和Server 2008上运行的当今最好的编写代码的方法是使用适当的跨进程API,例如RPC,命名管道等。不要使用SendMessage / PostMessage因为在会话0隔离下将失败。 http://www.microsoft.com/whdc/system/vista/services.mspx 现在,根据您的要求,您会有点不高兴。对于跨平台问题,我不确定是否支持远程处理。您可能必须下拉并完全回到套接字:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.aspx 如果这是一个托盘应用程序,而不是真正的服务,请警惕使用管道或TCP / IP时如何设置通信。如果有多个用户登录到计算机(Citrix,远程桌面),并且每个用户都启动了托盘应用程序"服务",则可能会遇到多个进程尝试使用相同的知名端口或管道的情况。当然,如果您不打算支持多个管道,或者您拥有真正的服务而不是在每个用户外壳程序中运行的托盘应用程序,那么这不是问题。 你们当中有人真的尝试过使用Mono进行远程处理吗?它工作正常。您可能会遇到一些极端情况,但这极不可能。只需不时测试跨平台(MS.Net <-> Mono)远程处理的应用程序,即可发现任何可能的故障。从最近的Mono开始,当前是2.4.2。 让您的服务在带有普通旧TCP流套接字的预定义端口上侦听127.0.0.1。从桌面应用程序连接到该端口。 非常简单,完全跨平台。 大多数具有GUI组件的服务都以命名用户身份运行,并被允许访问桌面。这使您可以通过COM或.NET进行访问,但只能在本地访问(除非您想变得复杂) 我个人而言,我在服务上打开了一个普通的旧套接字-它的跨平台,允许多个客户端,允许任何应用访问它,不依赖于为其打开Windows安全性并允许您的GUI用您喜欢的任何语言编写(因为所有内容都支持套接字)。 对于托盘应用程序,您希望使用一个简单的协议进行通信-您最好使用REST风格的系统向其发送命令,并向后流XML(yuk)或自定义数据格式。 很有趣的是,我打算建议Remoting! Mono 1.0发行说明(由于缺少原始位置,因此来自archive.org)提到了System.Runtime.Remoting.dll作为受支持的库,但未提及已知问题。 如果没有远程处理,则可能必须实现自己的TCP消息框架协议。 Windows没有等效的UNIX域套接字在同一台计算机上进行通信。 远程处理是一个选项,但它不是跨平台的。其他一些方法是使用命名管道,IPC或内核事件。 |
最新内容
相关内容
linux7关闭服务命令?
linux7关闭服务命令?,系统,软件,服务,命令,电脑,状态,工具,管理,进程,用户,求Linux关机命令详解shutdown命令 shutdown命令用于安全关闭Linuxlinux导出到桌面命令?
linux导出到桌面命令?,系统,信息,地址,名称,时间,电脑,设备,名字,密码,文件,scp从linux服务器拷贝文件到windows的机子上怎么写命令?首先从服linux服务器域名命令?
linux服务器域名命令?,地址,信息,系统,网络,服务,环境,名称,网站,管理,电脑,linux临时启动域名解析服务的命令是1、在linux环境下能实现域名的服务启动linux命令?
服务启动linux命令?,服务,密码,信息,系统,名称,命令,文件,用户,下面,服务器,linux如何启动mysql服务1、首先,我们需要修改mysql的配置文件,一般linux服务器命令框?
linux服务器命令框?,系统,情况,状态,信息,数据,软件,指标,服务,在线,工具,linux系统怎样查看服务器性能命令1、使用top命令 top命令是一个常用服务器linux命令教程?
服务器linux命令教程?,系统,地址,密码,网络,设备,工作,服务,标准,连续,管理,重启服务器的linux命令1、首先我首要把linux开机, 命令 rebot 这个linux删除服务的命令?
linux删除服务的命令?,服务,系统,软件,平台,名称,管理,环境,产品,命令,文件,在linuxcentos系统里面怎么用命令删除服务1、这里主要解决使用rpmlinux开机服务命令行?
linux开机服务命令行?,系统,工作,地址,信息,服务,设备,数字,第一,设计,发行,linux常用命令有哪些1、linux系统常用操作命令linux系统常用操作linux用命令进去桌面?
linux用命令进去桌面?,密码,系统,终端,官网,设备,环境,桌面,快捷键,命令,窗口,linux命令行怎么进入桌面1、返回到我的桌面界面:Ctrl+Alt+F7退出linux服务器分区命令?
linux服务器分区命令?,系统,管理,信息,设备,时间,命令,基础,首次,平均,情况,linux系统格式化分区用哪个命令Linux的磁盘格式化命令是“mkfs”,linux下看服务的命令?
linux下看服务的命令?,服务,状态,系统,名称,信息,工具,命令,环境,网络,情况,描述用命令如何启动,停止,重新启动和查看www服务?1、启动直接点开linux命令行交互界面?
linux命令行交互界面?,系统,密码,状态,终端,信息,工具,环境,情况,首页,界面,linux怎么进入字符命令界面?1、打开linux系统,在linux的桌面的空白