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

时间:2011-04-06 06:08:02

标签: c# windows-services

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

感谢

5 个答案:

答案 0 :(得分:3)

您可能会发现following article有用。

答案 1 :(得分:1)

启动和停止请参阅ServiceController类

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

您也可以在开始时传递参数。

答案 2 :(得分:1)

用于控制使用ServiceController类,如另一个所述。

让您的服务做一些由您的应用程序控制的特殊事物,您必须设置一种沟通方式。我建议您的服务在某个端口上侦听http请求,这可以相当容易地处理,因此您的服务可能由任何类型的应用程序甚至javascript ajax控制。如果不需要添加一些安全性,如授权

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

您需要了解安全性。

  • 使用ServiceController类可以控制服务(启动/停止/暂停/恢复和发送简单命令),并且具有安全的优势。通常只有管理员(可能是高级用户)才能控制服务although you can configure permissions

  • 如果您需要更灵活的东西,您需要某种形式的进程间通信来与服务进行通信 - 而且WCF是.NET世界中的一个很好的选择,如Matt Davis的回答所述。

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