我只创建过常规的Windows应用程序(主要是C#)。什么使Windows服务不同于常规Windows应用程序?它们有什么不同之处?服务可以做什么,而应用程序做不到?从开发者的角度来看,有哪些区别?如何创建一个Windows服务?只需要创建一个常规的应用程序(可能是控制台应用程序,因为没有GUI),然后以特殊的方式运行或安装它,还是需要更多的操作?
我只创建过常规的Windows应用程序(主要是C#)。什么使Windows服务不同于常规Windows应用程序?它们有什么不同之处?服务可以做什么,而应用程序做不到?从开发者的角度来看,有哪些区别?如何创建一个Windows服务?只需要创建一个常规的应用程序(可能是控制台应用程序,因为没有GUI),然后以特殊的方式运行或安装它,还是需要更多的操作?
有几个问题立即引起了我的注意:
这个MSDN页面提供了比你能想象到的更多有关创建它们的文档。 这个页面或许是一个更好的介绍。
作为应用和服务运行的进程之间的关键区别在于,服务可以完全不受用户和会话的正常关联而运行。因此,服务可以在任何用户登录之前启动并且可以在用户注销后继续运行。服务因此被用于实现操作系统的大量实际功能。
服务也不与运行1:1映射的进程绑定。许多服务可以存在于一个进程中,通常通过使用svchost实现(使用进程资源管理器查看这些内容,就可以了解它们通常如何工作)。这减少了启动时的工作量,因为相对轻量级的服务不需要多个进程。
在C#中实现服务非常简单,这个页面以非常易于理解的方式说明了如何实现。
请注意,在Windows中,服务实际上只是注册表中HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services下的脚手架,它定义了被认为是服务的“映像路径”(在大多数情况下只是可执行文件和要使用的参数),以及它们运行的用户、它们依赖的其他服务以及它们是否在启动/后启动时启动或按需启动。
主要的区别在于,Windows服务是一种你想要作为后台服务运行且不需要UI的东西。例如,一个服务可以索引驱动器上的文件以供搜索。
另一个好处是,你可以让服务在用户登录时自动启动。
还有一些方法可以重写,当服务启动/停止时会调用这些方法(例如从控制面板|管理工具|服务中)。
在Visual Studio中,有一种特殊的项目类型可供创建此类服务。请参见下面的网站示例:http://www.dotheweb.net/articles/dotnet/services.aspx