【问题标题】:How to control of windows service from a another desktop apps如何从另一个桌面应用程序控制 Windows 服务
【发布时间】:2011-04-06 06:08:01
【问题描述】:

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

谢谢

【问题讨论】:

    标签: c# windows-services


    【解决方案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 世界中是一个不错的选择。

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-03-01
              相关资源
              最近更新 更多