[英]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.