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

问题描述 投票:0回答:4

我只创建了常规 Windows 应用程序(主要是 C#)。 Windows 服务与常规 Windows 应用程序有何不同?是什么让他们与众不同?服务能做什么而应用程序不能做什么?从开发者的角度来看有哪些差异?你如何创建一个?是否只是创建一个常规应用程序(可能是控制台应用程序,因为没有 GUI?)并以特殊方式运行或安装它,还是还需要做更多工作?

c# windows-services comparison windows
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

© www.soinside.com 2019 - 2024. All rights reserved.