2012-06-04 66 views
1

我创建一个WinForms C#应用程序产卵我们的生产服务器上线和运行的作业。我在winforms应用程序中创建了这些作业,因为我需要一个GUI来配置和运行这些服务。如何在winforms应用程序下运行Windows服务?

最近,我们改变服务器和一定量的闲置时间后,我注销和关闭应用程序,所以我需要让Windows服务,以保持甚至当我退出运行它。问题是我需要GUI。

什么是创建窗口服务的最佳方式使用GUI界面(因为我需要他们的时候,我注销运行)?

+1

[进程间通信](http://stackoverflow.com/questions/56121/ipc-mechanisms-in-c -sharp使用率和最佳实践)。 –

+0

@ ta.speot.is是正确的,您可能需要将应用程序拆分为GUI部分和需要在退出时无需GUI才能运行的服务部分。您可以使用进程间通信在这些进程之间进行通信。 – kenny

+0

这样做的最佳方式是什么? WCF?有更简单的解决方案还是第三方软件可以更快地实现这一点? – Eitan

回答

0

如果你创造出真正的Windows Services

就可以启动,停止和使用the ServiceController class

编辑

如果从服务需要的数据,你可以使用WCF获得有关服务信息或者一个Socket来与服务进行通信。另一种选择是将服务的结果发布在知名文件夹中的文件中。

0

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

0

如果你想要一个简单的方法来谈谈你的过程,你也可以使用NamedPipeServerStreamNamedPipeClientStream。 这种技术是旧的,而不是真正聪明的,但易于使用(如果你知道在C#流管理)和快速。

唯一的缺点是,他们不说话的对象外的开箱。但为此我使用XML序列化。

  • 在发送侧:对象=> XML字符串=>字节[]
  • 在接收器侧:字节[] => XML字符串=>对象

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

有了服务,您也可以使用CustomCommands,但这只会要求服务产生没有给它参数的方法。 除非您将参数存储在某处(例如:XML文件),您的服务可以访问它们

相关问题