在C#中,能否将windows窗体应用程序作为服务启动?

在C#中,能否将windows窗体应用程序作为服务启动?,c#,C#,我有一个GUI C#Windows窗体程序,我想在计算机启动时作为一项服务启动,并且可能在系统托盘中有一个图标,单击该图标可使程序最大化。这是否可能不进行重大返工 谢谢Windows服务不能有GUI,至少不能直接使用。您必须将应用程序分为表示层/流程和服务层/流程: 表示层仍将是WinForms应用程序 服务层将作为Windows服务运行 它们两个必须通过进程间通信的某种方式相互通信,如命名管道或套接字。这取决于代码当前的编写方式。我有几个WinForm应用程序兼作服务,但大部分工作都已分离

我有一个GUI C#Windows窗体程序,我想在计算机启动时作为一项服务启动,并且可能在系统托盘中有一个图标,单击该图标可使程序最大化。这是否可能不进行重大返工


谢谢

Windows服务不能有GUI,至少不能直接使用。您必须将应用程序分为表示层/流程和服务层/流程:

  • 表示层仍将是WinForms应用程序
  • 服务层将作为Windows服务运行

它们两个必须通过进程间通信的某种方式相互通信,如命名管道或套接字。

这取决于代码当前的编写方式。我有几个WinForm应用程序兼作服务,但大部分工作都已分离到另一个程序集中。我针对这些应用的解决方案通常有3个项目:WinApp、Service和Library(我在这里过于简单化了)

如果您觉得您的WinForm应用程序可以提供良好的服务,那么您的代码可能处于这样一种状态,您可以很容易地将其分离出来。添加一个服务项目非常简单,为它添加安装程序更具挑战性,但仍然有很好的文档记录。最棘手的部分是为它制作一个正确安装服务的部署包,但是。。。只要你知道你需要寻找它,它就有很好的记录


<>编辑:只是为了澄清,一般来说,我不认为这是一个重大的项目。

你可以编写代码使它运行为一个服务,但我认为更重要的问题是,它提供了什么?有多种方法可以最小化托盘中的应用程序,您可以在启动系统托盘时启动所述应用程序

这是我经常提到的关于windows服务的链接。它是基于WCF的,但我认为只要稍加修改,您就可以让它适合您:

关于最小化托盘,这个问题有一个很好的答案:


您可以使用第三方应用程序,如FireDaemon(),将任何程序作为服务启动。FireDaemon中有许多可用选项,例如表单可见性、故障时重新启动等。但是,它不会自动为应用程序创建托盘图标。因此,您的应用程序必须更改为具有自己的托盘图标功能,FireDaemon只需启动程序并管理流程

FireDaemon的成本约为40美元(USD)。我想还有许多其他类似的应用程序可用


我会首先考虑创建一个其他回答者提到的实际服务项目,但要记住这种方法。它在一些情况下对我来说都很好。

您可以在windows中使用任务管理器,并设置一个任务,在每次windows启动时执行应用程序的.exe。

我记得还有一个“Lite”版本的FireDaemon,它是完全免费的。我还在用它。