创建Windows服务
windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志。计算机启动时,服务会自动开始运行,他们不要用户一定登陆才运行。
可以通过选择菜单“开始”-〉“控制面板”-〉“管理工具”-〉“服务”来查看现有系统中的服务,如下图:
创建window 服务
新建一个window 服务项目MyService,如下图
切换到代码视图修改.
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Diagnostics;
- using System.IO;
- using System.Linq;
- using System.ServiceProcess;
- using System.Text;
- using System.Threading.Tasks;
- namespace MyService
- {
- public partial class Service1 : ServiceBase
- {
- //定时器
- System.Timers.Timer t = null;
- public Service1()
- {
- InitializeComponent();
- //启用暂停恢复
- base.CanPauseAndContinue = true;
- //每5秒执行一次
- t = new System.Timers.Timer(5000);
- //设置是执行一次(false)还是一直执行(true);
- t.AutoReset = true;
- //是否执行System.Timers.Timer.Elapsed事件;
- t.Enabled = true;
- //到达时间的时候执行事件(theout方法);
- t.Elapsed += new System.Timers.ElapsedEventHandler(theout);
- }
- //启动服务执行
- protected override void OnStart(string[] args)
- {
- string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "启动";
- WriteLog(state);
- }
- //停止服务执行
- protected override void OnStop()
- {
- string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "停止";
- WriteLog(state);
- }
- //恢复服务执行
- protected override void OnContinue()
- {
- string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "继续";
- WriteLog(state);
- t.Start();
- }
- //暂停服务执行
- protected override void OnPause()
- {
- string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "暂停";
- WriteLog(state);
- t.Stop();
- }
- public void WriteLog(string str)
- {
- using (StreamWriter sw = File.AppendText(@"d:\service.txt"))
- {
- sw.WriteLine(str);
- sw.Flush();
- }
- }
- public void theout(object source, System.Timers.ElapsedEventArgs e)
- {
- WriteLog("theout:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
- }
- }
- }
解释: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 |
| 方法 | 事件 |
| 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方法里设置一个断点,然后等它执行,服务执行到该处时候会自动启动断点
转:http://blog.csdn.net/yinlong2015/article/details/71213365###;
创建Windows服务的更多相关文章
- 用C#创建Windows服务(Windows Services)
用C#创建Windows服务(Windows Services) 学习: 第一步:创建服务框架 创建一个新的 Windows 服务项目,可以从Visual C# 工程中选取 Windows 服务(W ...
- 玩转Windows服务系列——创建Windows服务
创建Windows服务的项目 新建项目->C++语言->ATL->ATL项目->服务(EXE) 这样就创建了一个Windows服务项目. 生成的解决方案包含两个项目:Servi ...
- .Net创建windows服务入门
本文主要记录学习.net 如何创建windows服务. 1.创建一个Windows服务程序 2.新建安装程序 3.修改service文件 代码如下 protected override void On ...
- C# 创建Windows服务
创建windows服务项目 2 右键点击Service1.cs,查看代码, 用于编写操作逻辑代码 3 代码中OnStart用于执行服务事件,一般采用线程方式执行方法,便于隔一段事件执行一回 END ...
- 使用Topshelf创建Windows服务
概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...
- [转]C#创建Windows服务与安装
本文档用于创建windows服务说明,使用vs2010系统平台 创建项目 1 创建windows服务项目 2 右键点击Service1.cs,查看代码, 用于编写操作逻辑代码 3 代码中OnStart ...
- [Solution] Microsoft Windows 服务(2) 使用Topshelf创建Windows服务
除了通过.net提供的windows服务模板外,Topshelf是创建Windows服务的另一种方法. 官网教程:http://docs.topshelf-project.com/en/latest/ ...
- 在64位windows下使用instsrv.exe和srvany.exe创建windows服务
在64位windows下使用instsrv.exe和srvany.exe创建windows服务 在32位的windows下,包括windows7,windows xp以及windows 2003, ...
- 使用Topshelf 5步创建Windows 服务 z
使用Topshelf创建Windows 服务简要的介绍了创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with T ...
- C#创建windows服务搭配定时器Timer使用实例(用代码做,截图版)
功能说明:C#创建一个windows服务,服务启动时D:\mcWindowsService.txt写入数据,服务运行期间每隔两秒写入当前时间. 原理这些就不说了,三语两语说不清楚,直接贴一个实例 ...
随机推荐
- html入门1
1.HTML超文本标记语言,(Hypertext Markup Language),通过一段内容定义为标题,段落或者图像等,从而让该内容具有结构以及含义 2.W3C:万维网联盟(World Wide ...
- VM虚拟机拍摄快照时出错或者克隆失败解决办法
在换了固态硬盘后,下载好VM,装虚拟机,结果克隆虚拟机和拍摄快照时出问题了. 拍摄快照时出错或者隆失败出现参数错误如图: 所提供的参数中有一个无效参数 解决办法 出现这个问题一般是在机械硬盘的电脑上面 ...
- JAVA同步锁机制 wait() notify() notifyAll()
wait() notify() notifyAll() 这3个方法用于协调多个线程对共享数据的存取,所以必须在synchronized语句块中使用. wait() 必须在synchronized函数或 ...
- 一些不常用的Oracle用法记录(含模糊查询)
(一).判断 某字段 是否包含 某字符串 select * from mc_member m where instr(m.bu, 'BU') > 0 --查询bu包含'BU' (二).将 某字段 ...
- jq解决a连接锚点平滑过渡
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- Intellij idea配置及安装插件小记一二
1.项目创建慢及控制台乱码解决. -DarchetypeCatalog=internal:项目骨架采用内部,解决Maven项目创建生成慢: -Dfile.encoding=GB2312:控制台用Sys ...
- Alpha阶段敏捷冲刺总结
项目感言 张艺琳 在这次冲刺中,我主要担任着PM的角色.不仅要梳理流程给小组每个成员进行分工,并且还要及时监督他们在要求时间内提交代码.同时我也参与到开发中去,与小组成员一起讨论数据库,最后一起设计出 ...
- 最近在研究syslog日志,就说一下syslog格式吧
syslog格式:<PRI>HEADER MESSAGE syslog的消息长度:不超过1024.syslog格式举例:<15>Jul 10 12:00:00 192.168. ...
- web前端页面设计小笔记
input总是在点击的时候出现蓝色边框,这是input的默认属性,就算设置了border:none:也没有用! #解决方法:outline:none; 设置input框里的placeholder值得字 ...
- ansible 变量详解
定义变量的方法 1. 主机变量,在hosts文件中设置变量, [atlanta] host1 http_port= maxRequestsPerChild= host2 http_port= maxR ...