Windows服务和常规应用程序有什么区别?

我只创build了常规的Windows应用程序(主要是C#)。 什么区别Windows服务和普通的Windows应用程序? 是什么使他们不同? 一个应用程序不能做什么服务? 从开发者的angular度看,有什么不同? 你如何创build一个? 是否只是创build一个常规的应用程序(也许控制台应用程序,因为没有gui?),运行或安装在一个特殊的方式,还是更多的必须完成?

有几件事立即跳出来给我。

  • 他们运行在一个完全不同的控制台,从Vista开始
  • 由于在不同的控制台中运行,服务无法与桌面交互。 所以基本上没有直接的UI支持。 您通常必须编写一个兄弟UI应用程序,该应用程序作为普通程序运行,并使用一些机制(例如命名管道)与该服务进行通信。
  • 通常,只有一个服务实例可以在任何给定时间运行。
  • 进程是每个用户,服务是每个工作站,因此经常为多个用户提供服务。

这MSDN页面导致更多的文档创建它们比你可以动摇棒。 一般来说, 这个页面可能是更好的介绍。

作为应用程序运行的进程与作为服务运行的进程之间的主要区别在于,服务可以完全在与用户和会话的正常关联之外进行操作。 因此,服务可以在任何用户登录之前运行,并且在用户注销后可以继续运行。 服务因此被用来实现操作系统的大量实际功能。

服务也不像绑定到一个进程的1:1映射。 许多服务可以在一个进程中存在,通常通过使用svchost(使用进程资源管理器查看这些信息以指示这种情况经常发生)。 这减少了启动时的工作,因为相对轻量级的服务不需要多个进程。

在c#中实现一个服务非常简单,这个页面指出了如何非常容易地遵循术语。

请注意,在Windows中的服务实际上是HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services下的注册表中的脚手架,它定义了那些被视为服务的“图像路径”(在大多数情况下只是可执行文件和要使用的参数)哪个用户然后运行,他们依赖哪些其他服务以及他们是否在启动/启动后启动或根据需要启动。

如果您熟悉Unix,则Windows服务就像Unix守护进程一样。 它不与任何特定用户关联,并且始终在后台运行。

主要区别在于Windows服务是您想要作为后台服务运行的东西,不需要用户界面。 一个例子是一个服务,索引您的驱动器上的文件进行搜索。

另一个好处是你可以在用户登录时自动启动服务。

还有一些方法可以覆盖在服务启动/停止时(即从“控制面板”|“管理工具”|“服务”)调用的方法。

在Visual Studio中有一个特殊的项目类型可以用来创建它。 有关示例,请参阅下面的网站: http : //www.dotheweb.net/articles/dotnet/services.aspx