windows服务
原文: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 | 
| 方法 | 事件 | 
| 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方法里设置一个断点,然后等它执行,服务执行到该处时候会自动启动断点。
windows服务的更多相关文章
- 基于SignalR实现B/S系统对windows服务运行状态的监测
		
通常来讲一个BS项目肯定不止单独的一个BS应用,可能涉及到很多后台服务来支持BS的运行,特别是针对耗时较长的某些任务来说,Windows服务肯定是必不可少的,我们还需要利用B/S与windows服务进 ...
 - C#创建、安装、卸载、调试Windows Service(Windows 服务)的简单教程
		
前言:Microsoft Windows 服务能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面.这 ...
 - 玩转Windows服务系列汇总
		
玩转Windows服务系列汇总 创建Windows服务 Debug.Release版本的注册和卸载及其原理 无COM接口Windows服务启动失败原因及解决方案 服务运行.停止流程浅析 Windows ...
 - 玩转Windows服务系列——给Windows服务添加COM接口
		
当我们运行一个Windows服务的时候,一般情况下,我们会选择以非窗口或者非控制台的方式运行,这样,它就只是一个后台程序,没有界面供我们进行交互. 那么当我们想与Windows服务进行实时交互的时候, ...
 - 玩转Windows服务系列——使用Boost.Application快速构建Windows服务
		
玩转Windows服务系列——创建Windows服务一文中,介绍了如何快速使用VS构建一个Windows服务.Debug.Release版本的注册和卸载,及其原理和服务运行.停止流程浅析分别介绍了Wi ...
 - 玩转Windows服务系列——Debug、Release版本的注册和卸载,及其原理
		
Windows服务Debug版本 注册 Services.exe -regserver 卸载 Services.exe -unregserver Windows服务Release版本 注册 Servi ...
 - C# 开发windows服务的一些心得
		
最近在做一个windows服务的项目,发现并解决了一些问题,拿出来和大家分享一下,以下windows服务简称“服务” 文章会在适合时间更新,因为朋友们在不断提出新的意见或思路,感谢-.- 1.服务如何 ...
 - 使用topshelf包装redis为windows服务
		
Redis服务端目前用的是控制台程序运行,部署的时候能作为windows服务后台运行感觉更好.找到一篇文章Running Redis as a Windows Service,利用win ...
 - 编写Windows服务疑问1:操作过程
		
Windows 服务开发平时不太受人关注,毕竟那是高大上的项目类型,平常需求也用不上,很多老掉牙的家伙也只知有WinForm,仍不知有WPF,更别说Windows 服务了,正如陶渊明所写的,“不知有汉 ...
 - C# windows服务制作(包括安装及卸载)
		
开篇语 因工作内容需要做一个windows服务,此前并没有相关经验,所以做了一个demo来跑跑这个梗(高手跳过,需要的来踩)- 效果如下:打开服务,可以找到我们新增的一个windows服务,这个dem ...
 
随机推荐
- Google翻译请求(难点是tk参数)
			
业务需求需要将一些文字翻译一下··· 但是直接调用接口收费啊啊啊啊(貌似是前几百万字免费,然后就开始收费了)···· 就想研究一下Google翻译接口... 想模拟Google向服务器发送一个Http ...
 - PHP通过访问第三方接口,根据IP地址获取所在城市
			
<?php header('Content-Type:text/html;Charset=utf-8'); /** * 获取IP地址 * * @return string */ function ...
 - Redis的一些坑
			
转载请注明出处哈:http://carlosfu.iteye.com/blog/2254154 上上周和同事(龙哥)参加了360组织的互联网技术训练营第三期,美团网的DBA负责人侯军伟给大家介绍了美团 ...
 - windows 下wamp环境1 配置之apache的安装
			
一.安装apache2.4 打开网站 apachelounge.com https://www.apachelounge.com/ 点击左侧Downloads,然后选择对应的版本,这里选择Apa ...
 - Jquery简单瀑布流代码示例
			
最近很多网站都采用瀑布流风格设计,感觉挺有个性的,比较合适做图片类型的网站,没事仿开心网做一个瀑布流示例. 需要用到Jquery,jquery.masonry.min.js <!DOCTYPE ...
 - CentOS-6.5-saltstack-安装
			
官方网站:https://www.saltstack.com/ 官方文档 https://docs.saltstack.cn/contents.html GitHub: https://gith ...
 - fullpage.js小技巧
			
创造一个自适应的section: 在 section 类旁边加上类 fp-auto-height 例如:<div class="section fp-auto-height" ...
 - Spring mvc 报错:No qualifying bean of type [java.lang.String] found for dependency:
			
具体错误: No qualifying bean of type [java.lang.String] found for dependency: expected at least 1 bean w ...
 - huffman编码压缩算法(转)
			
参考:http://blog.csdn.net/sunmenggmail/article/details/7598012 笔试时遇到的一道题.
 - MVC框架 与Smarty
			
MVC一种软件设计模式 MVC全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据. ...