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

6

我只创建过常规的Windows应用程序(主要是C#)。什么使Windows服务不同于常规Windows应用程序?它们有什么不同之处?服务可以做什么,而应用程序做不到?从开发者的角度来看,有哪些区别?如何创建一个Windows服务?只需要创建一个常规的应用程序(可能是控制台应用程序,因为没有GUI),然后以特殊的方式运行或安装它,还是需要更多的操作?

4个回答

11

有几个问题立即引起了我的注意:

  • 它们在Vista及以上版本中完全在不同的控制台中运行。
  • 由于在不同的控制台中运行,服务无法与桌面交互。因此,基本上没有直接的UI支持。通常,您需要编写一个兄弟UI应用程序,该应用程序作为普通程序运行,并使用某种机制(例如命名管道)与服务通信。
  • 通常情况下,您的服务只能同时运行一个实例。
  • 进程是针对用户的,而服务是针对工作站的,因此经常为多个用户提供服务。

7

这个MSDN页面提供了比你能想象到的更多有关创建它们的文档。 这个页面或许是一个更好的介绍。

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

服务也不与运行1:1映射的进程绑定。许多服务可以存在于一个进程中,通常通过使用svchost实现(使用进程资源管理器查看这些内容,就可以了解它们通常如何工作)。这减少了启动时的工作量,因为相对轻量级的服务不需要多个进程。

在C#中实现服务非常简单,这个页面以非常易于理解的方式说明了如何实现。

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


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

1

主要的区别在于,Windows服务是一种你想要作为后台服务运行且不需要UI的东西。例如,一个服务可以索引驱动器上的文件以供搜索。

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

还有一些方法可以重写,当服务启动/停止时会调用这些方法(例如从控制面板|管理工具|服务中)。

在Visual Studio中,有一种特殊的项目类型可供创建此类服务。请参见下面的网站示例:http://www.dotheweb.net/articles/dotnet/services.aspx


我更愿意说,您可以在计算机上没有任何交互会话的情况下运行服务。您可以在用户以各种方式登录时启动许多程序。在这种情况下,使用服务并不真正有益。 - Joey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接