C# windows 服务(转)
来源:互联网 发布:散热器优化仿真 编辑:程序博客网 时间:2024/06/03 21:42
原文:http://www.cnblogs.com/hfliyi/archive/2012/08/12/2635290.html
我对例子做了小修改
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
ServiceProcessInstaller类
用于安装ServiceBase继承的windows服务,它与一个可执行程序中的所有服务所做基本工作相同
ServiceProcessInstaller属性
属性描述Account运行服务的当前用户账号HelpText在服务安装选项中给出的帮助信息Password运行服务的当前账号密码UserName运行服务的当前账号用户名
------------------------------------------------------------------------------------------------------------------------
Windows服务调试
vs打开MySerivceLog项目
在管理工具-〉服务里面启动MyServiceLog服务
单击vs的调试 -〉附加到进程,如下图
在"可用进程“列表中,选中你要调式的服务的可执行文件名
单击 ”附加“按钮,即可进入调试状态
在timer1_Elapsed方法里设置一个断点,然后等它执行,服务执行到该处时候会自动启动断点。
- C# windows 服务(转)
- 转: 安装C# Windows服务程序
- 转 用C# 创建windows服务
- C#创建Windows服务
- C#创建Windows服务
- C#控制Windows服务
- c# 编写windows服务
- c# windows服务
- C# 创建 Windows 服务
- C# windows 服务
- c# windows服务程序
- C# 安装 Windows 服务
- C# 创建windows服务
- C# 监控Windows服务
- C# 写windows服务
- C#编写Windows服务
- C#写windows服务
- C#创建Windows服务
- 对给定的3个整数从小到大排序
- 如何理解递归
- hdu4763 Theme Section (KMP)
- PB事件与SENDMESSAGE函数的关系
- 管家婆服装.NET II TOP V6.5-VIP卡使用注意事项(一)
- C# windows 服务(转)
- Cocos2dx Cygwin编译-格式问题“CocosDenshion/android/SimpleAudioEngine” make error解决方法
- FFT 变化
- GCC 参数详解
- 异或运算交换两个元素位置,不需要额外空间
- 编程之美一 : 让CPU占有率曲线听你指挥
- 修改终端提示信息
- HDU 4302 Holedox Eating (两个优先队列)
- 内存管理之伙伴算法