繁体   English   中英

如何从另一个桌面应用程序控制Windows服务

[英]How to control of windows service from a another desktop apps

假设我有一个Windows服务,它可以完成某些工作,并由c#开发。 现在我想用c#开发另一个win应用程序,该应用程序可以控制我的win服务并与之交互。 假设我想从我的Win应用程序启动/停止我的Win服务,或者我想从我的Win应用程序运行我的Win服务的特定方法。 如何开发可以与我的Win服务交互的Win应用程序类型。 请详细讨论。

谢谢

您可能会发现以下文章很有用。

有关启动和停止的信息,请参见ServiceController类

http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.aspx

您还可以在启动时传递参数。

为了进行控制,请使用另一个声明的ServiceController类。

要使您的服务执行受应用程序控制的特殊操作,就必须建立一种通信。 我建议您的服务在某个端口上侦听http请求,该请求可以相当容易地处理,因此您的服务可能由任何类型的应用程序控制,甚至包括javascript ajax。 如果不需要,请添加一些安全性,例如授权。

对于Windows服务和Windows应用程序之间的通信,我使用Windows Communication Foundation (WCF)。 在Windows服务中,我托管了一个WCF服务,该服务“侦听”传入的请求。 我的Windows应用程序创建了一个WCF客户端,该客户端与Windows服务中托管的WCF服务进行通信。 从编程的角度来看,WCF客户端调用WCF服务上的方法。 所有幕后的复杂性都是隐藏的,因此从程序员的角度来看,您似乎只是在进行函数调用。

要启动和停止服务,我使用ServiceController类。 请注意,此类具有一定的安全要求。 具有有限系统特权的用户将无法直接使用此类。

您需要注意安全性。

  • 使用ServiceController类使您控制服务的能力有限(启动/停止/暂停/继续和发送简单命令),并且具有安全性的优点。 尽管可以配置权限,但是通常只有管理员(也许是高级用户)才能控制服务。

  • 如果您需要一些更灵活的东西,则需要某种形式的进程间通信才能与服务进行通信-Watt是.NET世界中的一个不错的选择,如Matt Davis的回答所述。

    但是,在这种情况下,假设您不想只允许任何人与您的服务进行交互,则需要实现自己的安全性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM