如何从另一个桌面应用程序控制 Windows 服务
Posted
技术标签:
【中文标题】如何从另一个桌面应用程序控制 Windows 服务【英文标题】:How to control of windows service from a another desktop apps 【发布时间】:2011-04-06 06:08:01 【问题描述】:假设我有一个 Windows 服务,它可以做一些工作并由 c# 开发。现在我想用 c# 开发另一个 win 应用程序,它可以控制我的 win 服务并与之交互。假设我想从我的 win 应用程序启动/停止我的 win 服务,或者我想从我的 win 应用程序运行我的 win 服务的特定方法。如何开发这种可以与我的 win 服务交互的 win 应用程序。请详细讨论。
谢谢
【问题讨论】:
【参考方案1】:您可能会发现following article 很有用。
【讨论】:
【参考方案2】:关于启动和停止参见 ServiceController 类
http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.aspx
你也可以在启动时传递参数。
【讨论】:
【参考方案3】:为了控制使用另一个声明的 ServiceController 类。
让你的服务做一些由你的应用控制的特殊事情,你必须建立一种通信。我建议您的服务在某个端口上侦听 http 请求,这可以相当容易地处理,因此您的服务可能由任何类型的应用程序控制,甚至是 javascript ajax。如果不需要,请添加一些安全性,例如授权。
【讨论】:
【参考方案4】:对于 Windows 服务和 Windows 应用程序之间的通信,我使用Windows Communication Foundation (WCF)。在我的 Windows 服务中,我托管了一个“侦听”传入请求的 WCF 服务。我的 Windows 应用程序创建了一个 WCF 客户端,该客户端与 Windows 服务中托管的 WCF 服务进行通信。从编程的角度来看,WCF 客户端调用 WCF 服务上的方法。所有幕后的复杂性都被隐藏起来了,所以从程序员的角度来看,您似乎只是在进行一个函数调用。
要启动和停止服务,我使用ServiceController
类。请注意,此类具有一定的安全要求。具有有限系统权限的用户将无法直接使用此类。
【讨论】:
【参考方案5】:您需要注意安全性。
使用 ServiceController 类为您提供了一些控制服务的有限能力(启动/停止/暂停/恢复和发送简单命令),并且具有安全的优势。通常只有管理员(可能还有高级用户)才能控制服务although you can configure permissions。
如果您需要更灵活的东西,则需要某种形式的进程间通信来与服务进行通信 - 如 Matt Davis 的回答中所述,WCF 在 .NET 世界中是一个不错的选择。
但是在这种情况下,您需要实现自己的安全性,假设您不想让任何人与您的服务进行交互。
【讨论】:
以上是关于如何从另一个桌面应用程序控制 Windows 服务的主要内容,如果未能解决你的问题,请参考以下文章
如何修改windows server 2003远程桌面最大连接数