Windows Service 小品

简介: Windows Service 小品

我们通过 Windows 服务可以创建在 Windows 会话中长时间运行的应用程序。服务可以跟随计算机一起启动,并且可以暂停、停止和重启。Windows 服务和 Windows Form 程序最大的不同点是 Windows 服务没有任何用户界面。Windows 服务一般用于后台处理数据,例如批量信息发送、定时执行任务、进程监视等方面。并且还可以针对不同的登录账户执行不同的服务操作等。对于创建 Windows 服务没有哪个开发平台比 .NET Framework 更加便捷,尤其是利用 C# 开发 Windows 服务对于程序员来说说简单的飞起。 Windows 服务虽然开发很简单但是注意事项太多了,多说开发人员在开发的时候往往会忽略一些东西,那么这篇文章就带领读者详细讲解一下 Windows 服务。


Windows 服务体系结构包含三个模块:服务模块、服务控制模块和服务配置模块。下面我们来详细讲解一下这三个模块。


  1. 服务模块

Windows 服务的核心模块,主要包含三个部分:入口函数 、Service 函数和处理程序。它们都由 SCM (服务控制器)控制,SCM 可以说是 Windows 服务核心的核心。它是操作系统的一个组成部分,用于和 Windows 服务进行通信,操作系统依靠 SCM 控制 Windows 服务进程的启动、停止和交互。


  • 入口函数,程序的入口,在这里可以注册多个服务函数;
  • Service 函数,它包含服务的实际功能。SCM 为每个需要启动的服务调用 Service 函数;
  • 处理程序,响应来自 SCM 的事件,所响应的事件包括:停止、暂停、重启等。

image.png

2.服务控制模块

负责把控制请求(如:启动、停止、暂停和重启)发送给服务。服务控制模块独立于 SCM 和服务本身。它的主要作用有两个:

  • 询问服务的状态并实现响应自定义控制代码的处理程序;
  • 向服务发送控制代码并处理程序应该响应发送的事件。


3.服务配置模块

负责安装服务,它会把服务复制到文件系统中,以及把服务的信息写到注册表中。其中注册表中的信息主要用于 SCM 开始和启动服务。这里需要注意:

  • 服务必须在注册表中配置不然服务将无法启动,这是因为注册表包含服务的启动类型;
  • 我们必须设置服务的用户、依赖关系。这些工作都是在服务配置程序中进行的。


.NET 中和服务相关的类都位于命名空间 System.ServiceProcess 中。它包含了四个类:ServiceBase 、 ServiceController 、ServiceProcessInstaller 和 ServiceInstaller。ServiceBase 类是服务的基类,它定义了一些可被重载的函数,通过重载这些函数服务控制管理器就可以控制 Windows 服务程序。常用的可重载的函数包括:OnStart()、OnStop()、OnPause() 以及 OnContinue() 。如果涉及特殊用途那么可以重载 OnCustomCommand() 函数来完成。ServiceBase 类还为我们提供了很多属性,常用的属性包括:ServiceName 属性(指定 Windows 服务名称)、 CanPauseAndContinue属性(是否允许暂停并恢复服务) 和 CanStop 属性(是否允许停止服务)。 ServiceController 使我们可以连接到正在运行或已停止的服务。通过它可以更改服务状态并获取有关服务的信息。创建服务控制器类的实例时,我们设置与安装的 Windows Service 交互属性。ServiceController 主要用于管理 SCM 的工具。


ServiceProcessInstaller 和 ServiceInstaller 主要用于服务的安装配置,它们执行特定于其所关联服务的操作。安装工具用来将与服务关联的注册表值写入注册表项。

具用来将与服务关联的注册表值写入注册表项。


目录
相关文章
|
4月前
|
Linux C++ Windows
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
|
28天前
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
41 11
|
4月前
|
Java 应用服务中间件 开发工具
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
|
4月前
|
Java 应用服务中间件 Windows
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
|
4月前
|
PHP Windows
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
|
4月前
|
PHP 开发工具 git
【Azure 应用服务】在 App Service for Windows 中自定义 PHP 版本的方法
【Azure 应用服务】在 App Service for Windows 中自定义 PHP 版本的方法
|
4月前
|
网络安全 API 数据安全/隐私保护
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
|
4月前
|
Shell PHP Windows
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
|
4月前
|
存储 Linux Windows
【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例
【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例
|
4月前
|
应用服务中间件 nginx Windows
【Azure 应用服务】在App Service for Windows中实现反向代理
【Azure 应用服务】在App Service for Windows中实现反向代理