从Windows服务控制我的应用程序
本文关键字:我的 应用程序 控制 服务 Windows | 更新日期: 2023-09-27 18:16:19
我有一个c#桌面应用程序,它有一些用户输入字段和2个按钮- START &停止。在单击START时,它将连接到服务器/外部设备。一旦连接,用户就可以输入数据并将信息发送到服务器/外部设备。现在我需要创建一个Windows服务来自动启动和停止与服务器的连接。我指的是与服务器建立连接的服务(如START按钮所做的)。
目前,我在解决方案文件中添加了一个新的Windows服务项目。现在我的解决方案文件有两个。exe文件。第一个用于构建用户应用程序,另一个用于构建Windows服务。
我的实际问题是:我可以在Service1.cs文件的OnStart事件下编写START按钮的单击事件代码(以自动启动&停止服务器)?
你的问题的答案是否定的。由于开始按钮驻留在用户应用程序中,click事件将在那里触发和处理,而不是在Windows服务中。
为了从你的用户应用程序控制你的Windows服务,你必须使用某种进程间通信(IPC)。这很有道理,对吧?正如我已经说过的,应用程序中的事件对于服务来说甚至是不可见的,因为它们是两个不同的进程。这就是IPC发挥作用的地方。当用户与应用程序交互时,交互被转换为通过IPC机制发送给服务的命令,以便服务可以执行命令规定的逻辑。同样,服务的结果可以通过IPC机制发送到应用程序,以便显示给用户。 有各种IPC机制——套接字、远程、管道、共享内存等。对于基于。net的软件,推荐的方法是Windows通信基础(WCF)。简而言之,WCF允许您定义特定于您的使用的可编程API ,用于在多个应用程序域之间交换信息。实际上,只需调用一个方法就可以交换数据。从开发人员的角度来看,这只是一个函数调用。如何将信息打包并发送到另一个应用程序域取决于如何配置WCF管道。想要使用套接字?想要使用管道吗?想要使用HTTP?通过简单地更改WCF配置,可以使用所有这些选项(以及更多选项)。我已经成功地使用了WCF,但是不可否认,学习曲线是陡峭的。实际上,出于性能原因,我已经退回到使用套接字作为IPC机制。尽管如此,WCF还是值得一看,因为您不必担心所选择的IPC机制的复杂性。我已经回答了关于这个的另一个问题。它应该能让你开始学习。
HTH