繁体   English   中英

在C#中,您可以将Windows窗体应用程序作为服务启动吗?

[英]In C#, can you make a windows form application start as a service?

我有一个GUI C #Windows窗体程序,我希望在计算机启动时作为服务启动,并且可能在系统托盘中有一个图标,当单击时最大化程序。 这可能没有重大的返工吗?

谢谢

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

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

他们两个将不得不通过一些进程间通信方式相互通信,如命名管道或套接字。

您可以使用第三方应用程序(如FireDaemon( http://www.firedaemon.com/ ))将任何程序作为服务启动。 FireDaemon中有许多选项,例如表单可见性,失败时重启等。但是,它不会自动为您的应用程序创建托盘图标。 因此,您的应用必须更改为具有自己的托盘图标功能,FireDaemon将启动该程序并管理该过程。

FireDaemon的价格约为40美元。 我想有许多其他类似的应用程序可用。

我将首先考虑创建一个其他回答者提到的实际服务项目,但请记住这种方法。 在一些情况下,它对我来说措辞不错。

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

如果您认为您的WinForm应用程序可以提供良好的服务,那么您可能会将代码置于这样一种状态,以至于您可以轻松地将其分离出来。 添加服务项目非常简单,为它添加安装程序更具挑战性,但仍有详细记录。 最棘手的部分是为它安装一个部署包来正确安装服务,但是再次......只要你知道你需要查找它,它就会被很好地记录下来。

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

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

这是我总是回顾有关执行Windows服务的链接。 它是基于WCF的,但我想通过一些修改你可以让它适合你:

http://support.microsoft.com/kb/317421

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

什么是最小化托盘C#WinForms应用程序的正确方法是什么?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM