window 服务(一)
来源:互联网 发布:淘宝冲三国杀元宝软件 编辑:程序博客网 时间:2024/06/10 11:44
转自:http://www.cnblogs.com/hfliyi/archive/2012/08/12/2635290.html
windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志。计算机启动时,服务会自动开始运行,他们不要用户一定登陆才运行。
可以通过选择菜单“开始”-〉“控制面板”-〉“管理工具”-〉“服务”来查看现有系统中的服务,如下图:
创建window 服务
新建一个window 服务项目MyService,如下图
从工具箱的组件表中拖动一个Timer对象(此处注意:Timer对象不同于Form的Timer对象,命名空间不同!!若使用Form命名空间下的Timer,则定时器不起任何作用!!)到这个视图设计器上面。
设置Timer属性,Enable为true,Interval属性为3000毫秒
双击Timer事件,添加事件(一般自己建立Timer事件)
1 public partial class Service1 : ServiceBase 2 { 3 public Service1() 4 { 5 InitializeComponent(); 6 } 7 8 protected override void OnStart(string[] args) 9 {10 // TODO: 在此处添加代码以启动服务。11 }12 13 protected override void OnStop()14 {15 // TODO: 在此处添加代码以执行停止服务所需的关闭操作。16 }17 18 private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)19 {20 21 }22 }
1 public partial class Service1 : ServiceBase 2 { 3 public Service1() 4 { 5 InitializeComponent(); 6 } 7 protected override void OnStart(string[] args) 8 { 9 // TODO: 在此处添加代码以启动服务。10 string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "启动";11 WriteLog(state);12 }13 protected override void OnStop()14 {15 // TODO: 在此处添加代码以执行停止服务所需的关闭操作。16 string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "停止";17 WriteLog(state);18 }19 private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)20 {21 WriteLog(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));22 }23 public void WriteLog(string str)24 {25 using (StreamWriter sw = File.AppendText(@"c:\service.txt"))26 {27 sw.WriteLine(str);28 sw.Flush();29 } 30 }31 }
其中OnStart和OnStop分别是服务器启动和停止后,所发生的事件操作方法,WriteLog是操作方法;
将服务程序service1.cs 切换到视图模式,用鼠标右键单击设计视图选择“添加安装程序”选项,此后在项目中自动增加了一个ProjectInstaller.cs,如下图
设置serviceInstaller1组件属性,
ServiceName=MyServiceLog安装服务器名字;
StartType=Automatic 开机自动启动
设计serviceProcessInstaller1的属性Account=LocalSystem;
运行编译,一个简单的windows服务已经开发完成
注:如果在代码中的文件路径写成如下“service.txt”,那么此时文件保存在C:\WINDOWS\system32文件夹中。
安装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()
等待服务到达指定的状态
- window 服务(一)
- window服务和测试(一)
- c/c++编写window服务的授权服务(一)
- window 服务
- Window服务
- window服务
- window服务
- window 服务
- Window服务
- window服务
- Window服务
- 用C/C++编写的Window服务一例
- mongodb(一) window安装以及服务创建
- 编写 Window 服务程序
- window系统服务详解
- window系统服务一览表
- Window 服务详解
- 创建window服务
- C语言const限定词基本用法
- RK3399(1)
- curl_init()和curl_multi_init()多线程的速度比较
- Android强大的图片加载框架:Glide的基本用法
- MapInfo数据导入到ArcGIS(格式转换tab --> shap)
- window 服务(一)
- 替换ListView和GridView的RecycleView
- 读懂正则表达式就这么简单
- C 练习实例51-60
- 罗振宇新书被“喷”,网红打广告是否要讲明利益相关?
- 字符串拼接执行速度和内存消耗比较
- solr
- android 权限整理
- 电邮欺诈增长2370%:企业网络攻击的头号威胁