如何在winforms应用程序下运行Windows服务?

时间:2012-06-04 06:53:35

标签: c# .net winforms

我创建了一个Winforms C#应用程序来生成线程并在我们的生产服务器上运行作业。我在winforms应用程序中创建了作业,因为我需要一个GUI来配置和运行服务。

我们最近更换了服务器,并且在一定的空闲时间后注销并且应用程序已关闭,所以我需要制作Windows服务以使其即使在我注销时也能继续运行。问题是我需要GUI。

使用GUI界面创建Windows服务的最佳方法是什么(因为我需要在我注销时运行它们)?

3 个答案:

答案 0 :(得分:0)

如果您创建真实Windows Services

您可以使用the ServiceController class

开始,停止并获取有关该服务的信息

修改

如果您需要服务中的数据,则可以使用WCF或Socket与服务进行通信。另一种选择是将服务结果发布在知名文件夹中的文件中。

答案 1 :(得分:0)

在用户会话中生成Windows服务(= Interactive Windows service)不是一个好主意,并被视为漏洞。我在项目中通过在GUI和服务部分中拆分应用程序解决了这个问题,就像肯尼所说的那样。他们通过WCF进行通信。另一种可能性是Memory-Mapped files

答案 2 :(得分:0)

如果您想要一种简单的方式在流程之间进行交谈,您还可以使用NamedPipeServerStreamNamedPipeClientStream。 这项技术很老,不是很聪明,但很容易使用(如果你知道C#中的流管理)并且速度很快。

唯一的缺点是他们没有开箱即用的对话。但为此我使用XML序列化。

  • 在发件人方面:对象=> XML String =>字节[]
  • 在接收方:byte [] => XML String =>对象

为了保持简单,我总是使用String []对象,我在接收器端解析,就像我在应用程序的void main(String [] args)中所做的那样

使用服务,您也可以使用CustomCommands,但这只要求服务在不给出参数的情况下生成方法。 除非您将参数存储在某个地方(即:XML文件),您的服务可以访问它们