[转]Windows 服务

原文:http://www.cnblogs.com/hfliyi/archive/2012/08/12/2635290.html

windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志。计算机启动时,服务会自动开始运行,他们不要用户一定登陆才运行。

可以通过选择菜单“开始”-〉“控制面板”-〉“管理工具”-〉“服务”来查看现有系统中的服务,如下图:

创建window 服务

新建一个window 服务项目MyService,如下图

切换到代码视图修改.

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Diagnostics;
 6 using System.IO;
 7 using System.Linq;
 8 using System.ServiceProcess;
 9 using System.Text;
10 using System.Threading.Tasks;
11
12 namespace MyService
13 {
14     public partial class Service1 : ServiceBase
15     {
16         //定时器
17         System.Timers.Timer t = null;
18
19
20         public Service1()
21         {
22             InitializeComponent();
23
24             //启用暂停恢复
25             base.CanPauseAndContinue = true;
26
27             //每5秒执行一次
28             t = new System.Timers.Timer(5000);
29             //设置是执行一次(false)还是一直执行(true);
30             t.AutoReset = true;
31             //是否执行System.Timers.Timer.Elapsed事件;
32             t.Enabled = true;
33             //到达时间的时候执行事件(theout方法);
34             t.Elapsed += new System.Timers.ElapsedEventHandler(theout);
35
36         }
37
38         //启动服务执行
39         protected override void OnStart(string[] args)
40         {
41             string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "启动";
42             WriteLog(state);
43
44         }
45
46         //停止服务执行
47         protected override void OnStop()
48         {
49             string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "停止";
50             WriteLog(state);
51         }
52
53         //恢复服务执行
54         protected override void OnContinue()
55         {
56             string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "继续";
57             WriteLog(state);
58             t.Start();
59         }
60
61         //暂停服务执行
62         protected override void OnPause()
63         {
64             string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "暂停";
65             WriteLog(state);
66
67             t.Stop();
68         }
69
70
71         public void WriteLog(string str)
72         {
73             using (StreamWriter sw = File.AppendText(@"d:\service.txt"))
74             {
75                 sw.WriteLine(str);
76                 sw.Flush();
77             }
78         }
79
80         public void theout(object source, System.Timers.ElapsedEventArgs e)
81         {
82
83             WriteLog("theout:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
84         }
85     }
86 }

解释:OnStart和OnStop分别是服务器启动和停止后,所发生的事件操作方法.定义了一个定时器,每隔5秒执行一次(theout方法),因为暂停恢复功能默认是不启用的,需要设置CanPauseAndContinue属性启用此功能,同时重写OnStop和OnContinue方法,添加自己的逻辑代码.

将服务程序service1.cs 切换到视图模式,用鼠标右键单击设计视图选择“添加安装程序”选项,此后在项目中自动增加了一个ProjectInstaller.cs,

如下图

打开ProjectInstaller,修改serviceInstaller1组件属性

Description= 我的服务备注                       服务备注说明

DisplayName=我的服务                            服务友好名字

ServiceName=MyService                         安装服务器名字

StartType=Automatic                             服务类型

ü         Manual      服务安装后,必须手动启动。

ü         Automatic    每次计算机重新启动时,服务都会自动启动。

ü         Disabled     服务无法启动。

并设计serviceProcessInstaller1的属性Account=LocalSystem

运行编译,一个简单的windows服务已经开发完成.

安装window服务

安装命令:InstallUtil.exe MyServiceLog.exe

InstallUtil存在路径为:C:\WINDOWS\Microsoft.NET\Framework\.NET版本号

复制C:\WINDOWS\Microsoft.NET\Framework\版本号  路径中的InstallUtil.exe 到bin/debug或bin/release文件夹中,在命令行窗口中直接运行命令

InstallUtil.exe MyServiceLog.exe,在系统中注册这个服务,使它建立一个合适的注册项,如下图:

然后再window服务列表中,启动MyServiceLog服务

卸载window 服务

命令:InstallUtil.exe MyServiceLog.exe /u

如果修改这个服务,但是路径没有变化的话是不需要重新注册服务的,直接停止服务,然后用新的文件覆盖原来的文件即可,如果路径发生变化,应该先卸载这个服务,然后重新安装这个服务。

------------------------------------------------------------------------------------------------------

Window服务应用程序体系结构

.net framework对windows服务提供了更多的支持,在命名空间System.ServiceProcess下.

包括类如下:

ServiceBase 所有Window服务的基类

ServiceController 该类的一个实例代表一个具体的windows服务

ServiceControllerPermission 用于控制ServiceController的使用权限

ServiceInstaller 用于执行对windows服务的安装

ServiceProcessInstaller 用于执行对windows服务的安装,与上类的不同的是,该类可以代表一个可以执行的windows服务的进程.

ServiceBase类

ServiceBase方法:


方法


描述


Run()


运行一个windows服务


OnContinue()


继续执行服务


OnCustomCommand()


向windows服务发出自定指令


OnPause()


暂停正在运行的windows服务


OnPowerEvent()


当计算机的电源状态改变是调用


OnShutDown()


当系统关闭条用OnStart()开始一个windows服务


OnStop()


结束一个windows服务

ServiceBase属性:


属性


描述


AutoLog


表示是否将开始,结束,暂停,继续等指令写入事件日志


CanHandlePowerEvent


表示该服务是否支持电源事件


CanPauseAndContinue


表示该服务是否支持暂停和继续功能


CanShutDown


表示该服务是否支持关闭功能


CanStop


表示该服务是否支持结构功能


EventLog


应用程序的时间日志


ServiceName


该服务名称

ServiceController类

服务控制类,用于控制windows服务的各种具体行为,它既可以控制本地的windows服务,有可以控制远程的windows服务。

ServiceControler的方法:


方法


描述


GetDivices()


得到一台计算机上设备驱动器服务


GetServices()


得到一台计算上的非设备驱动器服务


Close()


用于断开服务连接,并且释放服务控制器所占用的资源


Continue()


继续被暂停的服务


ExcuteCommand()


对服务执行一条自定义命令


Pause()


暂停服务


Refresh()


对所有属性更新


Start()


启动服务


Stop()


停止服务


WaitForStatus()


等待服务到达指定的状态

ServiceController属性

属性 描述
CanPauseAndContinue 表示服务是否可以停止
CanShutDown 表示服务在系统关闭时是否可以得到通知,CanStop表示服务器是否可以被停止
DependentServices 表示与服务相关联的设备
DisplayName 表示服务控制器所绑定的名称
MachineName 表示服务所在的计算机名称
ServiceName 表示绑定的服务名称
ServiceType 表示控制器所引用的服务类型
ServicesDependedOn 表示服务所依赖ude服务集合Status表示控制器所引用的服务状态

ServiceInstaller类

ServiceInstaller的属性

属性 描述
DisplayName 显示名称
ServiceName 表示服务名称,这个名称必须与Installer将要安装的windows服务名称相同
ServiceDependOn 服务所要用到的其服务名称的一个数组
StartType 表示所安装服务的启动特性,可以为Automatic,Manual或Disable,默认为Manual

ServiceInstaller事件

方法 事件
AfterInstaller() 调用Install方法后发生
AfterRollback() 调用Rollback后发生
AfterUninstall() 调用Uninstall方法后发生
BeforeInstall() 调用Install方法前发生
BeforeRollback() 调用Rollback方法前发生
BeforeUninstall() 调用Uninstall方法前发生
Committed() 调用Commit方法后发生
Committing() 调用Commit方法前发生

ServiceProcessInstaller类

用于安装ServiceBase继承的windows服务,它与一个可执行程序中的所有服务所做基本工作相同

ServiceProcessInstaller属性

属性 描述
Account 运行服务的当前用户账号
HelpText 在服务安装选项中给出的帮助信息
Password 运行服务的当前账号密码
UserName 运行服务的当前账号用户名

------------------------------------------------------------------------------------------------------------------------

Windows服务调试

管理员方式运行vs 打开MySerivceLog项目

在管理工具-〉服务里面启动MyServiceLog服务

单击vs的调试 -〉附加到进程,如下图

在附加到:选择里面勾选  自动确定要调试的代码类型

在"可用进程“列表中,选中你要调式的服务的可执行文件名

单击 ”附加“按钮,即可进入调试状态

在timer1_Elapsed方法里设置一个断点,然后等它执行,服务执行到该处时候会自动启动断点。

时间: 2024-07-30 21:56:26

[转]Windows 服务的相关文章

C# 远程服务器 安装、卸载 Windows 服务,读取远程注册表,关闭杀掉远程进程

这里安装windows服务我们用sc命令,这里需要远程服务器IP,服务名称.显示名称.描述以及执行文件,安装后需要验证服务是否安装成功,验证方法可以直接调用ServiceController来查询服务,也可以通过远程注册表来查找服务的执行文件:那么卸载文件我们也就用SC命令了,卸载后需要检测是否卸载成功,修改显示名称和描述也用sc命令.至于停止和启动Windows服务我们可以用sc命令也可以用ServiceController的API,当停止失败的时候我们会强制杀掉远程进程,在卸载windows

(转)为C# Windows服务添加安装程序

本文转载自:http://kamiff.iteye.com/blog/507129 最近一直在搞Windows服务,也有了不少经验,感觉权限方面确定比一般程序要受限很多,但方便性也很多.像后台运行不阻塞系统,不用用户登录之类.哈 哈,扯远了,今天讲一下那个怎么给Windows服务做个安装包.为什么做安装包?当然是方便了,不用每次调用InstallUtil,还有,就是看上去 正规些. 不多说了,先来看看怎么做吧.首先,当然是创建一个Windows服务的项目.这个大家应该都知道怎么做(这都不明白的留

c# windows 服务学习

用C#做windows服务变得简单对了===按照下面步骤来就行了用C#创建Windows服务(Windows Services)例子服务功能:这个服务在启动和停止时,向一个文本文件中写入一些文字信息. 第一步:创建服务框架 要创建一个新的 Windows 服务,可以从Visual C# 工程中选取 Windows 服务(Windows Service)选项,给工程一个新文件名,然后点击 确定.你可以看到,向导向工程文件中增加WebService1.cs类:其中各属性的含意是: Autolog 是

c#创建windows服务

最近做了个windows端的小工具,监测指定文件夹的内容并将新增文件保存到数据库,一开始利用的是windows自带的计划任务去做,现在想改成windows服务. 然后找了篇文章照着弄了下: http://www.cnblogs.com/knowledgesea/p/3616127.html 碰到以下问题: 1.安装服务时提示设置服务登录,需要输入用户名和密码 serviceProcessInstaller类的Account属性默认是User,改为LocalSystem,就不需要输入了. 几种账户

Windows 服务

一. Windows服务的简介 [摘自百度百科]Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面.这种服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用.还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务. 二. Windows 服务实现 1. 创

topshelf包装redis为windows服务

topshelf包装redis为windows服务 Redis服务端目前用的是控制台程序运行,部署的时候能作为windows服务后台运行感觉更好.找到一篇文章Running Redis as a Windows Service,利用windows installer实现的.如果使用topshelf,岂不是可以兼容mono,于是自己动手写了,实现很简单,代码已发布到github上 redis-topshelf. 如何使用? 1.打卡配置文件,配置文件描述如下: redis.service.name

利用Python脚本管理Windows服务

Windows服务常用的功能就是启动服务,关闭服务,重启服务和查询服务运行状态,其中查询服务运行状态是其他三种操作的基础. 本文中提到的使用Python脚本管理Windows服务实际上是调用win32serviceutil模块,此模块来自pywin32包,此模块本身有管理服务的功能,有兴趣的可以去阅读它的部分源码. 本脚本存在的目的是为了熟练Python的语法和基本操作,Windows下有更好的命令行工具来管理服务,如sc.Powershell等.通常命令行工具的执行速度要比services.m

(25)c# windows服务

转自 http://www.cnblogs.com/knowledgesea/p/3616127.html Windows服务介绍 Microsoft Windows 服务能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面.这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用.还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文

《C#高级编程》读书笔记(十九):Windows服务

1,Windows 服务 Windows 服务是可以在系统启动时自动打开的程序.如果需要在没有用户交互操作情况下运行程序,或者在权限比交互式用户更大的用户下运行程序,就可以创建 Windows 服务. 2,Windows 服务的体系架构 操作 Windows 服务需要3种程序: • 服务程序 • 服务控制程序 • 服务配置程序 服务程序本身用于提供需要的实际功能. 服务控制程序可以把控制请求发送给服务,如开始.停止.暂停和继续. 使用服务配置程序可以安装服务,也可以在以后改变服务的配置. 3,服

使用Topshelf快速搭建Windows服务

创建一个windows服务用于同步SqlServer数据到Elasticsearch 新建elasticsearch索引 PUT:http://localhost:9200/index_singer/ { "settings": { "number_of_shards": 5, "number_of_replicas": 1 }, "mappings": { "singer_index": { "