Windows服务二:测试新建的服务、调试Windows服务
一、测试Windows服务
为了使Windows服务程序能够正常运行,我们需要像创建一般应用程序那样为它创建一个程序的入口点。像其他应用程序一样,Windows服务也是在Program.cs的Main()函数中完成这个操作。首先我们在Main()函数中创建一个Windows服务的实例,该实例应该是ServiceBase类的某个子类的对象,然后我们调用由基类ServiceBase类定义的一个Run()方法。然而调用Run()方法并不意味着就开始了Windows服务程序,必须要等到该对象的OnStart()方法被调用时服务才算真正开始运行。如果你想在一个Windows服务程序中同时启动多个服务,那么只要在Main()函数中定义多个ServiceBase类的子类的实例对象就可以了,方法就是创建一个ServiceBase类的数组对象。
1 namespace WindowsServiceDemo 2 { 3 static class Program 4 { 5 /// <summary> 6 /// 应用程序的主入口点。 7 /// </summary> 8 static void Main() 9 { 10 ServiceBase[] ServicesToRun; 11 ServicesToRun = new ServiceBase[] 12 { 13 //服务1 14 new MyService(), 15 //服务2 16 new Service1() 17 }; 18 ServiceBase.Run(ServicesToRun); 19 } 20 } 21 }
由于Windows服务没有直接的用户交互,服务的状态必须通过记录日志才可知晓。要测试windows服务,可以通过重写服务里面的方法,在方法里面记录日志来实现。
1、新建Common类,类里面有一个WriteLog记录日志的方法。日志路径写在配置文件里面,可以实现项目的灵活性。
1 namespace WindowsServiceDemo 2 { 3 public class Common 4 { 5 /// <summary> 6 /// 记录日志 7 /// </summary> 8 /// <param name="strInfo"></param> 9 public static void WriteLog(string strInfo) 10 { 11 string strPath=ConfigurationManager.AppSettings["FilePath"]; 12 using (StreamWriter sw = new StreamWriter(strPath, true)) 13 { 14 sw.WriteLine(strInfo + ",当前时间:" + DateTime.Now.ToString()); 15 sw.Close(); 16 } 17 18 } 19 } 20 }
View Code
2、在Service1的设计界面点右键-->查看代码,打开Service1的代码,分别重写OnStart()、OnStop()、OnPause()、OnContinue()方法,在方法里面调用Common类的WriteLog方法来记录服务的运行状态。
1 namespace WindowsServiceDemo 2 { 3 public partial class MyService : ServiceBase 4 { 5 public MyService() 6 { 7 InitializeComponent(); 8 } 9 10 /// <summary> 11 /// 服务启动时执行的代码 12 /// </summary> 13 /// <param name="args"></param> 14 protected override void OnStart(string[] args) 15 { 16 try 17 { 18 Common.WriteLog("服务启动"); 19 } 20 catch (Exception ex) 21 { 22 Common.WriteLog("服务启动出错:"+ex.Message); 23 } 24 } 25 26 /// <summary> 27 /// 服务停止时执行的代码 28 /// </summary> 29 protected override void OnStop() 30 { 31 try 32 { 33 Common.WriteLog("服务停止"); 34 } 35 catch (Exception ex) 36 { 37 38 Common.WriteLog("服务停止出错:"+ex.Message); 39 } 40 } 41 42 /// <summary> 43 /// 服务暂停时执行的代码 44 /// </summary> 45 protected override void OnPause() 46 { 47 try 48 { 49 Common.WriteLog("服务暂停"); 50 } 51 catch (Exception ex) 52 { 53 54 Common.WriteLog("服务暂停出错:"+ex.Message); 55 } 56 } 57 58 /// <summary> 59 /// 服务恢复时执行的代码 60 /// </summary> 61 protected override void OnContinue() 62 { 63 try 64 { 65 Common.WriteLog("服务恢复"); 66 } 67 catch (Exception ex) 68 { 69 70 Common.WriteLog("服务恢复出错:"+ex.Message); 71 } 72 } 73 74 } 75 }
3、在服务控制管理器里面分别启动、暂停、恢复、停止服务,查看生成的日志:
日志里面正确记录了服务的运行状态,证明服务没有问题。
二、调试Windows服务
调试Windows服务,可以采用将服务附加到进程的方法。
1、在菜单栏选项里面选择调试-->附加到进程
2、在附加到进程界面,选择相应的服务进程,点击附加。
注意:要把服务附加到进程,必须保证服务是启动状态,否则在进程里面看不到服务的进程。
三、总结:
1、Windows服务调试不能直接F5,可以通过附加到进程方式调试(调试前提:将服务启动、以管理员身份运行VS)
2、Windows服务由于没有直接的用户交互,服务的状态必须通过日志才可知晓,恰当的加入try catch
3、所有可能发生变化的内容都不要写死,尽量通过配置文件来实现,这是项目灵活性的重要指标
4、Windows服务多用于定时操作、大数据量操作、监控操作等方面
转载于:https://www.cnblogs.com/dotnet261010/p/6180801.html
Windows服务二:测试新建的服务、调试Windows服务相关推荐
- 阿里P8 “布道师”,谈微服务的应用架构设计(附微服务教程)
本次分享基于微服务的应用架构设计,内容涉及如何构建一个微服务应用,服务注册与发现,微服务测试和典型的微服务架构设计模式,以及微服务架构在七牛的实践案例. 目录 构建一个微服务应用 服务注册与发现 微服 ...
- Windows如何添加右键新建菜单
Windows如何添加右键新建菜单 文章目录 Windows如何添加右键新建菜单 实验环境 缘起 以新建`.md`文件为例 第一步 第二步 第三步 总结 实验环境 Windows7 缘起 因为我习惯用 ...
- C#制作Windows service服务系列二:演示一个定期执行的windows服务及调试(windows service)(转载)...
系列一: 制作一个可安装.可启动.可停止.可卸载的Windows service(downmoon原创) 系列二:演示一个定期执行的windows服务及调试(windows service)(down ...
- Windows服务的创建、安装、调试
1:新建一个WINDOWS服务项目: 2:打开自动生成的Server1的源代码,可以在其中看到OnStart与OnStop方法,代表的是服务的启动与关闭: 3:将事件日志中的写日志的方法COPY到Se ...
- 使用C#调试Windows服务模板项目
目录 介绍 特征 准备此应用程序的步骤如下 1.创建Windows服务项目 2.将项目输出类型从Windows应用程序更改为控制台应用程序 3.安装log4net包 4.配置log4net 5.添加S ...
- Windows网络服务渗透测试实战-跨网段攻击
一.实验项目名称 Windows网络服务渗透测试实战-跨网段攻击 二.实验目的及要求 掌握对跨网段攻击的方法. 熟悉Metasploit终端的使用方法. 熟悉通过meterpreter进行后渗透操作 ...
- Windows网络服务渗透测试实战MS17-010漏洞复现
一.实验项目名称 Windows网络服务渗透测试实战MS17-010漏洞复现 二.实验目的及要求 熟悉Metasploit终端的使用方法: 掌握对MS17-010漏洞攻击的方法. 三.复现步骤(附加文 ...
- 调试windows服务
调试服务 在调试配置中生成你的服务. 安装你的服务. 从 "服务控制管理器"."服务器资源管理器"或代码启动服务. 使用管理凭据启动 Visual Studio ...
- 东航航空货运系统技术解析(二)配置服务端与新建界面层
1.5 在BLL(逻辑层)编写代码与配置服务引用,通过DAL层的方法连接数据库并对数据库的数据进行操作 第一步:在类库BLL里添加相关引用 1.5(图1) 在.NET架构里找到System.Servi ...
最新文章
- HDU1576 A/B (解法二)【试探法】
- 后盾网lavarel视频项目---lavarel多表关联一对多操作实例
- 以太网数据包、IP包、TCP/UDP 包的结构(转)
- Matlab神经网络十讲(8): 归一化、权重读取、(非)线性网络设计
- 对比表示学习必知的几种训练目标
- OpenCV注视估计Gaze Estimation的实例(附完整代码)
- SQL Server 2012如何打开2016的profiler文件
- 尝鲜 Svelte 前端框架,开发读书笔记
- 老也有错?科技行业对大龄程序员的歧视
- 论文笔记--网络新闻图像中人脸标注技术的研究-2011
- 【元胞自动机】基于matlab保守策略元胞自动机三车道(不开放辅路,软件园不影响)交通流模型【含Matlab源码 1293期】
- nacos启动闪退总结
- Hi3519av100 编译kernel
- Oracle in 不能超过1000的解决方案
- scrapy框架—spiders
- 成都传智播客,学生老师共同举杯庆祝初战高胜!
- C++小游戏《末日之战1:新生》1.12.31823.132
- python目标识别_10行Python代码实现目标检测
- Domain Adaption
- CC2530入网流程
热门文章
- mysql+server+80_Windows Server 2019 IIS10.0+PHP(FastCGI)+MySQL环境搭建教程
- css改变指针形状,css 指针样式
- SQLServer常见的数学函数梳理
- 收集一些常用的前端知识
- DoNet 高效开发必备开发工具
- 外卖和快递行业数据_下周一起,整治全面启动!锁定全市外卖、快递行业!
- html5的网络书店图书网站代码_【技能提升】10个编写HTML5的实用小技巧
- note同步不及时 one_朱海舟回应锤子便签同步不及时:工程师已经解决
- 【jQuery系列之插件】jQuery插件---exselect实现联动
- http://blog.csdn.net/myan/article/details/1906