一、Windows 服务简介

  Windows 服务是可以在系统启动时自动打开的(不需要任何人登录计算机)的程序。

  1、适合创建Windows 服务的场景:

  [1] 在没有用户交互操作的情况下运行程序;

  [2] 在权限比交互式用户更大的用户下运行程序;

  2、Windows 服务的示例:

  [1] WCF宿主(假定由于某些原因不能使用IIS);

  [2] 缓存网络服务器中数据的程序;

  [3]在后台重新组织本地磁盘数据的程序。

  3、Windows 服务的管理:

  windows系统下:控制面板 → 系统和安全 → 管理工具 → 服务;或者 在“ 搜索 Web 和 Windows ”中直接搜索“服务”。

二、Windows 服务的体系结构

  操作 Windows 服务需要三种程序:服务程序;服务控制程序;服务配置程序。

  1、服务程序:用于提供需要的实际功能;

  服务程序需要三个部分:主函数、service-main 函数、处理程序。

  服务控制管理器(Service Control Manager,SCM),对于服务有非常重要的作用,它可以把启动服务或停止服务的请求发送给服务。SCM是操作系统的一个组成部分,它的作用是与服务进行通信。

  如果将服务设置为自动启动,则在系统启动时,将启动该服务的每个进程,进而调用该进程的主函数。该服务负责为它的每项服务都注册一个 service-main 函数。主函数是服务程序的入口点,service-main 函数的入口点必须用SCM注册。

  [1] 主函数:程序的一般入口点,即 Main() 方法,它可以注册多个 service-main 函数;

  [2] service-main 函数包含服务的实际功能。服务必须为所提供的每项服务注册一个 service-main 函数。服务程序可以在一个程序中提供许多服务。SCM 为每一个应该启动的服务调用 service-main 函数。service-main 函数的一个重要任务是用SCM注册一个处理程序。

  [3] 处理程序:必须响应来自 SCM 的事件(停止、暂停 或 重新开始)。

  2、服务控制程序:用于把控制请求发送给服务,如开始、停止、暂停 和 继续。

  服务控制程序独立于 SCM 和服务本身。服务控制程序可以控制服务,一是,可以把控制代码发送给服务,处理程序应该响应发送的事件;二是,可以询问服务的实际状态,并实现一个响应自定义控制代码的自定义处理程序。

  3、服务配置程序:用于安装服务,这意味着不但要把服务复制到文件系统中,还要把服务的信息写到注册表中,这个注册信息由服务控制管理器(SCM)用于开始和启动服务。

  服务必须在注册表中配置。注册表包含了服务的启动类型(自动、手动 或禁用)。必须配置服务程序的用户、服务的依赖关系。所有的配置工作在服务配置程序中进行。服务配置程序也可以在以后用于改变服务配置参数。

  4、Windows 服务的类

  在 .NET Framework 中,可以在 System.ServiceProcess 名称空间中找到实现服务的3部分的服务类:

  [1] 必须从 ServiceBase 类继承才可以实现服务。ServiceBase 类用于注册服务、响应开始和停止请求;

  [2] ServiceController 类用于实现服务控制程序。使用这个类,可以把请求发送给服务;

  [3] ServiceProcessInstaller 类和 ServiceInstaller 类用于安装和配置服务程序。

  

Windows Service 之 详解(一)的更多相关文章

  1. NetCore Selfhost,IIShost,Windows Service Host详解(自宿主、宿主在IIS,宿主在Windows Service中)

    第一部分.自托管 一.依赖.Net Core环境 修改 project.json 文件内容,增加发布时需要包含文件的配置内容(NetCore2.0版本不需要任何设置,NetCore2.0开始彻底放弃p ...

  2. Windows Service 之 详解(二)

    一.创建 Windows 服务程序 1.文件 → 新建 → 项目 → 选择 Windows 服务模板,创建 WinService 项目: 选择这个服务的属性,可以打开属性对话框.可配置如下值: [1] ...

  3. windows socket函数详解

    windows socket函数详解 近期一直用第三方库写网络编程,反倒是遗忘了网络编程最底层的知识.因而产生了整理Winsock函数库的想法.以下知识点均来源于MSDN,本人只做翻译工作.虽然很多前 ...

  4. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

  5. Python调用windows下DLL详解

    Python调用windows下DLL详解 - ctypes库的使用 2014年09月05日 16:05:44 阅读数:6942 在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分 ...

  6. redis.windows.conf配置详解

    redis.windows.conf配置详解 转自:https://www.cnblogs.com/kreo/p/4423362.html # redis 配置文件示例 # 当你需要为某个配置项指定内 ...

  7. 【转载】Android Studio Service AIDL 详解

    公司产品之前IM这块存在很多问题,消息到达率低,加上协议上有些问题,丢消息频繁,所以需要重构IM,AIDL不能解决以上问题.好吧!那AIDL可以解决什么问题?什么是AIDL? 什么是AIDL? AID ...

  8. 重装Windows系统 入门详解 - 基础教程

    重装Windows系统 入门详解 - 基础教程 JERRY_Z. ~ 2020 / 10 / 13 转载请注明出处!️ 目录 重装Windows系统 入门详解 - 基础教程 一.说明 二.具体步骤 ( ...

  9. windows 安装Git详解

    windows 安装Git详解 一.Git简介 Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Lin ...

随机推荐

  1. 最小化安装CentOS7 + xfce4 +PHP + nginx +mariadb 开发环境

    虚拟机自定义最小化安装,新增用户做为管理员,打开自动获取网络,桥接模式.所有的操作只有命令,不做解释,看不明白的可以自行搜索相关的资料. # 开头的行是注释行,# 开头的空行,我自己装机时做了快照.未 ...

  2. Polymer——Template

    Polymer Template 一.Ta的简介 template是polymer element中一个重要的组成部分,主要有两种使用目的,一是构建Shadow Dom,二是用于数据绑定和视图渲染. ...

  3. Linux 中 x86 的内联汇编

    工程中需要用到内联汇编,找到一篇不错的文章,趁机学习下. 原文地址:http://www.ibm.com/developerworks/cn/linux/sdk/assemble/inline/ 如果 ...

  4. 最短路径算法(Dijkstra算法、Floyd-Warshall算法)

    最短路径算法具体的形式包括: 确定起点的最短路径问题:即已知起始结点,求最短路径的问题.适合使用Dijkstra算法. 确定终点的最短路径问题:即已知终结结点,求最短路径的问题.在无向图中,该问题与确 ...

  5. RabbitMQ>Erlang machine stopped instantly (distribution name conflict?). The service is not restarted as OnFail is set to ignore.-报错解决方案 原来是NNND。。。

    >Erlang machine stopped instantly (distribution name conflict?). The service is not restarted as ...

  6. iOS中的谓词(NSPredicate)使用

    http://www.cocoachina.com/ios/20160111/14926.html 首先,我们需要知道何谓谓词,让我们看看官方的解释: The NSPredicate class is ...

  7. 【C语言】-一维数组

    数组: 数组是一系列相同类型的有序数据的集合,数组中的每一个元素都是同一个数据类型,所有元素共用一个名字,用下标来区别数组中的每一个元素. C语言中,数组属于构造数据类型.一个数组中含有多个数组元素, ...

  8. mime type 概要介绍

    内容类型 内容类型(Content-Type),这个头部领域用于指定消息的类型.一般以下面的形式出现. Content-Type: [type]/[subtype]; parameter type t ...

  9. Kicad使用经验谈

    最近开始学习使用Linux上的开源软件KiCad来绘制电路图和PCB.学习这个还是比较快的,用了两天了,觉得还是蛮方便的. 在这两天的使用以及今后的使用过程中,一定会有很多想要谈的.所以,就写下这篇博 ...

  10. 一个 C# 获取高精度时间类(调用API QueryP*)

    如果你觉得用 DotNet 自带的 DateTime 获取的时间精度不够,解决的方法是通过调用 QueryPerformanceFrequency 和 QueryPerformanceCounter这 ...