我正在尝试使用.net 中的 C# 创建一个 Windows 服务,该服务在用户登录之前运行......然后当用户登录时,系统托盘中应出现一个符号(时钟旁边)以显示用户该服务正在运行..通过双击该符号,应向用户显示一个配置实用程序(用 wpf 编写),以便他可以配置服务,从中读取数据等等..
是否有可能在一个应用程序中执行此操作?
提前感谢您的帮助!!!
不,您不能对一个应用程序执行此操作,因为服务在不同会话中与不同用户一起运行。您需要创建两个应用程序并在两者之间实现一些通信。
我不建议直接使用命名管道(如Kieren Johnstone 建议的那样),但可以看看 WCF,它是为进程间通信而设计的,它很好地抽象了通信技术的实现细节。这是一个可以适当地帮助您使用 WCF 的链接:http ://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication 。
最好的问候,
奥利弗·哈纳皮
在一个应用程序中,没有。服务在会话 0 中运行,请参见此处:
http://www.microsoft.com/whdc/system/sysinternals/session0changes.mspx
您最好的选择是使用命名管道,请参见此处:
http://www.switchonthecode.com/tutorials/dotnet-35-adds-named-pipes-support
....或内存映射文件,请参见此处:
在more-.NETty 的范围内,您还可以使用Remoting。您需要提出一些接口或协议来促进服务和管理实用程序之间的通信。管理流程启动/停止会更容易,您可以使用ServiceController
该类(MSDN ref)。
希望这会有所帮助(并且不会太令人沮丧)!