一、测试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服务相关推荐

  1. 阿里P8 “布道师”,谈微服务的应用架构设计(附微服务教程)

    本次分享基于微服务的应用架构设计,内容涉及如何构建一个微服务应用,服务注册与发现,微服务测试和典型的微服务架构设计模式,以及微服务架构在七牛的实践案例. 目录 构建一个微服务应用 服务注册与发现 微服 ...

  2. Windows如何添加右键新建菜单

    Windows如何添加右键新建菜单 文章目录 Windows如何添加右键新建菜单 实验环境 缘起 以新建`.md`文件为例 第一步 第二步 第三步 总结 实验环境 Windows7 缘起 因为我习惯用 ...

  3. C#制作Windows service服务系列二:演示一个定期执行的windows服务及调试(windows service)(转载)...

    系列一: 制作一个可安装.可启动.可停止.可卸载的Windows service(downmoon原创) 系列二:演示一个定期执行的windows服务及调试(windows service)(down ...

  4. Windows服务的创建、安装、调试

    1:新建一个WINDOWS服务项目: 2:打开自动生成的Server1的源代码,可以在其中看到OnStart与OnStop方法,代表的是服务的启动与关闭: 3:将事件日志中的写日志的方法COPY到Se ...

  5. 使用C#调试Windows服务模板项目

    目录 介绍 特征 准备此应用程序的步骤如下 1.创建Windows服务项目 2.将项目输出类型从Windows应用程序更改为控制台应用程序 3.安装log4net包 4.配置log4net 5.添加S ...

  6. Windows网络服务渗透测试实战-跨网段攻击

    一.实验项目名称 Windows网络服务渗透测试实战-跨网段攻击 二.实验目的及要求 掌握对跨网段攻击的方法. 熟悉Metasploit终端的使用方法. 熟悉通过meterpreter进行后渗透操作 ...

  7. Windows网络服务渗透测试实战MS17-010漏洞复现

    一.实验项目名称 Windows网络服务渗透测试实战MS17-010漏洞复现 二.实验目的及要求 熟悉Metasploit终端的使用方法: 掌握对MS17-010漏洞攻击的方法. 三.复现步骤(附加文 ...

  8. 调试windows服务

    调试服务 在调试配置中生成你的服务. 安装你的服务. 从 "服务控制管理器"."服务器资源管理器"或代码启动服务. 使用管理凭据启动 Visual Studio ...

  9. 东航航空货运系统技术解析(二)配置服务端与新建界面层

    1.5 在BLL(逻辑层)编写代码与配置服务引用,通过DAL层的方法连接数据库并对数据库的数据进行操作 第一步:在类库BLL里添加相关引用 1.5(图1) 在.NET架构里找到System.Servi ...

最新文章

  1. HDU1576 A/B (解法二)【试探法】
  2. 后盾网lavarel视频项目---lavarel多表关联一对多操作实例
  3. 以太网数据包、IP包、TCP/UDP 包的结构(转)
  4. Matlab神经网络十讲(8): 归一化、权重读取、(非)线性网络设计
  5. 对比表示学习必知的几种训练目标
  6. OpenCV注视估计Gaze Estimation的实例(附完整代码)
  7. SQL Server 2012如何打开2016的profiler文件
  8. 尝鲜 Svelte 前端框架,开发读书笔记
  9. 老也有错?科技行业对大龄程序员的歧视
  10. 论文笔记--网络新闻图像中人脸标注技术的研究-2011
  11. 【元胞自动机】基于matlab保守策略元胞自动机三车道(不开放辅路,软件园不影响)交通流模型【含Matlab源码 1293期】
  12. nacos启动闪退总结
  13. Hi3519av100 编译kernel
  14. Oracle in 不能超过1000的解决方案
  15. scrapy框架—spiders
  16. 成都传智播客,学生老师共同举杯庆祝初战高胜!
  17. C++小游戏《末日之战1:新生》1.12.31823.132
  18. python目标识别_10行Python代码实现目标检测
  19. Domain Adaption
  20. CC2530入网流程

热门文章

  1. mysql+server+80_Windows Server 2019 IIS10.0+PHP(FastCGI)+MySQL环境搭建教程
  2. css改变指针形状,css 指针样式
  3. SQLServer常见的数学函数梳理
  4. 收集一些常用的前端知识
  5. DoNet 高效开发必备开发工具
  6. 外卖和快递行业数据_下周一起,整治全面启动!锁定全市外卖、快递行业!
  7. html5的网络书店图书网站代码_【技能提升】10个编写HTML5的实用小技巧
  8. note同步不及时 one_朱海舟回应锤子便签同步不及时:工程师已经解决
  9. 【jQuery系列之插件】jQuery插件---exselect实现联动
  10. http://blog.csdn.net/myan/article/details/1906