我创建了一个 Winforms C# 应用程序来生成线程并在我们的生产服务器上运行作业。我在一个 winforms 应用程序中创建了这些作业,因为我需要一个 GUI 来配置和运行这些服务。
我们最近更改了服务器,并且在一定量的空闲时间后我已注销并且应用程序已关闭,因此即使我已注销,我也需要使 Windows 服务保持运行。问题是我需要 GUI。
使用 GUI 界面创建 Windows 服务(因为我需要它们在我注销时运行)的最佳方式是什么?
如果您想要一种简单的方式在您的进程之间进行对话,您还可以使用NamedPipeServerStream和NamedPipeClientStream。这项技术很古老,不是很聪明,但易于使用(如果您了解 C# 中的流管理)并且速度很快。
唯一的缺点是他们不会开箱即用地谈论 Object。但为此我使用 XML 序列化。
为了简单起见,我总是使用我在接收端解析的 String[] 对象,就像我在应用程序的 void main(String[] args) 中所做的那样
对于服务,您还可以使用CustomCommands,但这只是要求服务生成一个方法而不给它参数。除非您将参数存储在您的服务可以访问它们的某个位置(即:XML 文件)
在用户会话中生成 Windows 服务(=交互式 Windows 服务)不是一个好主意,并被视为一种利用。我在我的项目中通过将应用程序拆分为 GUI 和服务部分解决了这个问题,就像 kenny 说的那样。它们通过 WCF 进行通信。另一种可能性是内存映射文件。
如果您创建真正的Windows 服务
您可以使用ServiceController 类启动、停止和获取有关服务的信息
编辑
如果您需要来自服务的数据,您可以使用 WCF 或 Socket 与服务进行通信。另一种选择是将服务的结果发布到已知文件夹中的文件中。