Windows 服务和常规应用程序有啥区别?
Posted
技术标签:
【中文标题】Windows 服务和常规应用程序有啥区别?【英文标题】:What is the difference between a windows service and a regular application?Windows 服务和常规应用程序有什么区别? 【发布时间】:2010-11-16 02:27:28 【问题描述】:我只创建了常规的 Windows 应用程序(主要是 C#)。 Windows 服务与常规 Windows 应用程序的区别是什么?是什么让他们与众不同?服务能做什么而应用程序不能?从开发人员的角度来看有什么不同?你如何创建一个?是否只是创建一个常规应用程序(可能是控制台应用程序,因为没有 gui?)并以特殊方式运行或安装它,还是需要做更多?
【问题讨论】:
【参考方案1】:有几件事让我立即想到。
从 Vista 开始,它们在完全不同的控制台中运行 由于在不同的控制台中运行,服务无法与桌面交互。所以本质上没有直接的 UI 支持。您通常必须编写一个作为正常程序运行并使用某种机制(例如命名管道)与服务通信的同级 UI 应用程序。 通常在任何给定时间只能运行您的服务的一个实例。 进程是每个用户的,服务是每个工作站的,因此通常为多个用户提供服务。【讨论】:
【参考方案2】:This MSDN page 导致创建它们的文档比你动摇的要多。总的来说,This page 可能是对它们的更好介绍。
作为应用程序运行的进程与作为服务运行的进程之间的主要区别在于,服务可以完全在与用户和会话的正常关联之外运行。因此,服务可以在任何用户登录之前运行,并且可以在用户注销后继续运行。因此,服务用于实现操作系统的大量实际功能。
服务也不依赖于作为与进程的 1:1 映射运行。许多服务可以存在于一个进程中,通常是通过使用 svchost(使用进程资源管理器查看这些服务以了解其通常如何工作)。这减少了启动时的工作量,因为相对轻量级的服务不需要多个进程。
在 c# 中实现服务非常简单,page 表示非常容易遵循条款。
请注意,实际上,Windows 中的服务与注册表中 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services 下的脚手架相比,它定义了那些被考虑的“图像路径”(在大多数情况下只是可执行文件和要使用的参数)服务以及随后运行的用户、它们依赖的其他服务以及它们是在启动/启动后启动还是根据需要启动。
【讨论】:
【参考方案3】:如果您熟悉 Unix,Windows 服务就像 Unix 守护进程。它不与任何特定用户关联,并且始终在后台运行。
【讨论】:
【参考方案4】:主要区别在于,Windows 服务是您希望作为后台服务运行的东西,不需要 UI。一个示例是为您的驱动器上的文件编制索引以进行搜索的服务。
另一个好处是您可以在用户登录时自动启动服务。
您还可以覆盖在服务启动/停止时调用的方法(即从控制面板 | 管理工具 | 服务)。
在 Visual Studio 中,您可以使用一种特殊的项目类型来创建它。请参阅以下站点以获取示例:http://www.dotheweb.net/articles/dotnet/services.aspx
【讨论】:
我宁愿说您可以在没有任何交互式会话的机器上运行服务。当用户以各种方式登录时,您可以启动批次或程序。在那里使用服务并没有真正的好处。以上是关于Windows 服务和常规应用程序有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
Windows 窗体应用程序和 Windows 窗体应用程序 (.NET Framework) 有啥区别
WindowsApplication和ConsoleApplication有啥区别