Windows 服务应用程序介绍

Microsoft Windows 服务(过去称为 NT 服务)允许用户创建可在其自身的 Windows 会话中长时间运行的可执行应用程序。 这些服务可在计算机启动时自动启动,可以暂停和重启,并且不显示任何用户界面。 这些功能使服务非常适合在服务器上使用,或者需要长时间运行的功能(不会影响在同一台计算机上工作的其他用户)的情况。 还可以在与登录用户或默认计算机帐户不同的特定用户帐户的安全性上下文中运行服务。 有关服务和 Windows 会话的详细信息,请参阅 Windows SDK 文档。

可以通过创建作为服务安装的应用程序来轻松创建服务。 例如,假设你想监视性能计数器数据并对阈值作出响应。 可以编写一个侦听性能计数器数据的 Windows 服务应用程序,部署该应用程序并开始收集和分析数据。

可以将服务创建为 Microsoft Visual Studio 项目,并在其中定义代码,以控制可以将哪些命令发送到服务以及在收到这些命令时应采取的操作。 可以发送到服务的命令包括启动、暂停、恢复和停止服务,还可以执行自定义命令。

在创建和生成应用程序之后,可以通过运行命令行实用程序 InstallUtil.exe 并将该路径传递给服务的可执行文件来安装它。 然后,可以使用服务控制管理器来启动、停止、暂停、恢复和配置服务。 还可以在“服务器资源管理器”的“服务”节点中或使用 ServiceController 类完成许多相同的任务。

服务应用程序与其他 Visual Studio 应用程序

服务应用程序与许多其他项目类型的运行方式存在以下几个方面的不同:

  • 在项目能够以有意义的方式运行之前,服务应用程序项目创建的已编译可执行文件必须安装在服务器上。 无法通过按 F5 或 F11 来调试或运行服务应用程序;无法立即运行服务或单步执行其代码。 相反,必须安装并启动服务,然后将调试程序附加到服务进程。 有关详细信息,请参阅如何:调试 Windows 服务应用程序。

  • 与某些项目类型不同,你必须为服务应用程序创建安装组件。 安装组件在服务器上安装并注册该服务,并使用 Windows 服务控制管理器为服务创建条目。 有关详细信息,请参阅如何:将安装程序添加到服务应用程序。

  • 服务应用程序的 Main 方法必须为项目包含的服务发出 Run 命令。 Run 方法将服务加载到相应服务器上的服务控制管理器中。 如果使用 Windows 服务项目模板,则会自动为你编写此方法。 请注意,加载服务与启动服务不同。 有关详细信息,请参阅下面的“服务生存期”。

  • Windows 服务应用程序在不同于登录用户的交互式工作站的窗口站中运行。 窗口站是一个安全对象,它包含一个剪贴板、一个全局原子集和一组桌面对象。 由于 Windows 服务站不是交互式工作站,因此从 Windows 服务应用程序中引发的对话框将不会显示,并且可能导致程序停止响应。 同样,错误消息应记录在 Windows 事件日志中,而不是在用户界面中引发。

    .NET Framework 支持的 Windows 服务类不支持与交互式工作站(即登录用户)的交互。.NET Framework 也不包括表示工作站和桌面的类。 如果 Windows 服务必须与其他工作站进行交互,则需要访问非管理的 Windows API。 有关详细信息,请参阅 Windows SDK 文档。

    Windows 服务与用户或其他工作站的交互必须经过精心设计,以便包括各种场景(如没有登录用户或用户具有一组意外的桌面对象)。 在某些情况下,编写在用户控制下运行的 Windows 应用程序可能更合适。

  • Windows 服务应用程序在其自己的安全上下文中运行,并在用户登录安装这些应用程序的 Windows 计算机之前启动。 应仔细规划要在哪个用户帐户中运行服务;在系统帐户下运行的服务具有比用户帐户更多的权限和特权。

服务生存期

一项服务在其生存期内会经历几个内部状态。 首先,服务会安装到它将在其上运行的系统上。 此过程执行服务项目的安装程序,并将该服务加载到该计算机的服务控制管理器中。 服务控制管理器是 Windows 提供的用于管理服务的中央实用程序。

必须在服务加载完成后启动它。 启动该服务以允许它开始运行。 可以从服务“服务控制管理器”、“服务器资源管理器”,或从通过调用 Start 方法的代码来启动服务。 Start 方法将处理进程传递给应用程序的 OnStart 方法,并处理在那里定义的任何代码。

正在运行的服务可以在此状态下无限期地存在,直到它停止或暂停,或者直到计算机关闭。 服务可以三种基本状态之一存在:Running、Paused 或 Stopped。 该服务还可以报告挂起命令的状态:ContinuePending、PausePending、StartPending 或 StopPending。 这些状态指示命令已发出(例如,暂停正在运行的服务的命令),但尚未执行。 可以查询 Status 以确定服务所处的状态,或者在出现其中任一状态时使用 WaitForStatus 执行操作。

可以从“服务控制管理器”、“服务器资源管理器”,或通过调用代码中的方法来暂停、停止或恢复服务。 其中的每个操作都可以调用服务中的相关过程(OnStop、OnPause 或 OnContinue),可以在其中定义在服务更改状态时执行的其他处理进程。

服务类型

可以使用 .NET Framework 在 Visual Studio 中创建两种服务类型。 作为进程中唯一服务的服务将分配类型 Win32OwnProcess。 与其他服务共享进程的服务将分配类型 Win32ShareProcess。 可以通过查询 ServiceType 属性来检索服务类型。

如果查询未在 Visual Studio 中创建的现有服务,则可能偶尔会看到其他服务类型。 有关这些服务类型的更多信息,请参阅 ServiceType。

服务和 ServiceController 组件

ServiceController 组件用于连接到已安装的服务并操纵其状态;可以使用 ServiceController 组件启动和停止服务,暂停并继续其运行,并将自定义命令发送到服务。 但是,在创建服务应用程序时,无需使用 ServiceController 组件。 事实上,在大多数情况下,ServiceController 组件应存在于定义服务的 Windows 服务应用程序的单独应用程序中。

有关更多信息,请参见ServiceController。

要求

  • 必须在 Windows 服务应用程序项目或其他 .NET Framework(启用了在生成并从 ServiceBase类继承时创建 .exe 文件的项目)中创建服务。

  • 包含 Windows 服务的项目必须具有项目及其服务的安装组件。 这可以通过“属性”窗口轻松完成。 有关详细信息,请参阅如何:将安装程序添加到服务应用程序。

请参阅

Windows 服务应用程序
服务应用程序编程体系结构
如何:创建 Windows 服务
如何:安装和卸载服务
如何:启动服务
如何:调试 Windows 服务应用程序
演练:在组件设计器中创建 Windows 服务应用程序
如何:将安装程序添加到服务应用程序

转自:https://docs.microsoft.com/zh-cn/dotnet/framework/windows-services/introduction-to-windows-service-applications

Windows Service 介绍相关推荐

  1. C#创建一个Windows Service

    Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...

  2. Windows Service:用C#创建Windows Service

    现在的.NET框架已经为Windows service的开发提供足够强大的支持,你只需要关注service所要实现的逻辑,而完全不用关心service底层是如何实现的,相比以前用MFC来说,真是质的飞 ...

  3. .NET开发Windows Service程序 - Topshelf

    在实际项目开发过程中,会经常写一些类似定时检查,应用监控的应用.这类应用在windows平台通常都会写成window service程序. 在百度上搜索一下'c#开发windows service', ...

  4. go Windows Service

    相关库 https://godoc.org/golang.org/x/sys/windows/svc https://github.com/kardianos/service https://gith ...

  5. 新建第一个windows服务(Windows Service)

    首先,请原谅我是一个小白,一直到前段时间才在工作需要的情况下写了第一个windows服务.首先说一下为什么写这个windows服务吧,也就是什么需求要我来写这么一个东西.公司的项目中,需要一个预警功能 ...

  6. 创建一个Windows Service应用程序

    创建一个Windows Service应用程序 下载本文代码 见资源 正是由于.NET Framework的出现,才使你能够构建出在系统重新启动时自动运行的.无人参与的(unattended)应用程序 ...

  7. [转帖]windows7/windows NT介绍

    windows7/windows NT介绍 原文应该是IT168发布的 但是一直没找到 感觉看了之后 明白了很多 技术都是互相融合的 没有严格意义上的对立直说. Windows 7/Windows S ...

  8. C#开发Windows Service程序

    Windows Service概念介绍 Windows Service,也称Windows服务,是32位Windows操作系统中一种长期运行的后台程序.它们长期后台运行,没有用户界面,默默无闻,但它们 ...

  9. Windows 系统第三方服务开发者可以借助 WSH (Windows Service Hardening) 机制提高安全性

    Windows服务帐户是特权升级的首选攻击面之一,如果你能够盗用此类帐户,则获得最高特权非常容易,这主要是由于操作系统默认将强大的模拟特权授予服务. 即使Microsoft引入了WSH(Windows ...

最新文章

  1. java自动化开发_Java自动化开发指南
  2. Testlink在linux上安装遇到的问题
  3. win7开启休眠功能
  4. Python学习心得第一周-03练习1
  5. boot spring 对参数检测_【springboot】@Valid参数校验
  6. jpeg6 安装问题!
  7. C++内部类访问外部类
  8. ORM的问题第2部分–查询
  9. java基本数据类型存储,JAVA - 基本数据类型的存储空间长度
  10. 《软件调试分析技术》学习笔记
  11. 【离散数学】实验 编写一个简单的三人表决器
  12. Qt文档阅读笔记-Widgets Tutorial官方解析及实例
  13. PHP爱讯云商城源码v0.7.0-新增app功能
  14. Android 功耗(7)---思维导图
  15. JAVA类,变量的赋值一个小细节,以及static标注变量的意义
  16. 爬虫之requests库的使用
  17. python安装request失败_在python 虚拟环境下使用命令pip install -r request 安装软件失败?...
  18. oracle服务器客户端配置文件,服务器 oracle 客户端配置文件
  19. PTA C语言程序设计 单项链表
  20. 正则表达式:多选项匹配

热门文章

  1. 关于Fiddler使用和答疑
  2. 用shell脚本输出99乘法表
  3. yum配置代理proxy
  4. C#连接Access数据库(详解)
  5. Kumo的目标是让你离不开它!
  6. 相关系数和相关性分析(下):肯德尔相关系数
  7. 【FPGA】8B/10B编码--转自wiki百科
  8. HTML span 标签 的详细用法
  9. Photoshop CS6软件
  10. uni-app iOS发布