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 }

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服务多用于定时操作、大数据量操作、监控操作等方面

时间: 2024-12-23 06:30:23

Windows服务二:测试新建的服务、调试Windows服务的相关文章

windows下使用netbeans新建freecms并调试的步聚

1. 使用netbeans新建空的Java Web工程 2. 删除工程中的源码和web页面 3. 把freecms中的web和src分别拷到工程中对应的文件夹下 4. 把lib库导入工程 5. 在mysql中新建数据库freecms,编码用utf8_generic_ci 即可以在netbeans中编辑出相应的war包 6.在工具--服务器中配置tomcat服务器,然后在工程--属性--运行中配置服务器为tomcat 可能出错的地方 1. tomcat/bin下 catalina.bat 文件中

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

系列一: 制作一个可安装.可启动.可停止.可卸载的Windows service(downmoon原创) 系列二:演示一个定期执行的windows服务及调试(windows service)(downmoon) 系列三: windows service系列三--制作可控制界面的windows service 一.经常有人问起如何让程序定期自动执行? 除了像系统任务和SQL JOB/DTS等都可以满足不同的用户需求外,这里演示了如何做一个简单的windows serivce的框架.主要的功能是按照

C# VS 2010创建、安装、调试 windows服务(windows service)

在一个应用程序中创建多个 windows 服务的方法和 1083 的解决办法 错误解决方案 -------------------------------------------------------------------------------------- 1.创建 windows服务 项目   文件 -> 新建项目 -> 已安装的模板 -> Visual C# -> windows ,在右侧窗口选择"windows 服务" 2.系统已经为我们建立了一个

c#创建、安装、卸载、调试windows服务的简单事例

本篇文章只是简单陈诉用c#创建.安装.卸载.调试windows服务的步骤. 一.创建windows服务 1.用VS创建windows服务,结果如下: 2.删除默认生成的Service1.cs文件,然后创建自己的服务文件(如:MyService),并修改Program.cs文件的代码,如下: 此时,解决方案的目录结构如下: 3.双击MyService.cs服务文件,在左侧设计模式中,右键,点击“添加安装程序”,自动会生成Projectinstaller.cs文件以及两个安装组件,如下: 4.右键”

C#——》创建Windows服务,发布并调试Windows服务

一,创建一个windows服务项目.  二,双击Service1.cs进入设计界面,在空白处右键单击选择添加安装程序,如下图所示. 三,添加安装程序后,会进入如下图界面,生成两个组件:serviceProcessInstaller1.serviceInstaller1. 四,设置组件 serviceInstaller1组件的主要属性有: ServiceName: 服务名称,在启动/关闭服务时会需要用到这个属性,用来唯一标识一个服务. StartType:设置为Manual(手动启动),默认停止,

qt调试windows服务的方法

现在程序的main函数中sleep足够长的时间,确保自己能够在改时间内完成附加到进程的操作,但是这个时间也不能太长(一般小于20s),因为windows服务如果太长时间没有进入start函数就会启动失败. 然后在需要的地方设置断点,设置好之后最好重新编译一次. 重新编译完成之后,在windows的服务中重启需要调试的服务,然后迅速切换到qt界面,选择“调试--开始调试--关联至运行中的外部应用程序”在弹出的对话框中选择自己的服务进程就可以了. 选择完进程之后,qt界面会进入debug模式,进入d

.NET windows服务(二:创建和卸载windows服务)

引用地址: https://docs.microsoft.com/zh-cn/dotnet/framework/windows-services/how-to-create-windows-services 手动安装你的服务 在 Windows"启动"菜单或"启动"屏幕上,依次选择"Visual Studio"."Visual Studio Tools"."开发人员命令提示". 出现 Visual Stud

WCF服务二:创建一个简单的WCF服务程序

在本例中,我们将实现一个简单的计算服务,提供基本的加.减.乘.除运算,通过客户端和服务端运行在同一台机器上的不同进程实现. 一.新建WCF服务 1.新建一个空白解决方案,解决方案名称为"WCFSolution". 2.解决方案右键->添加->类库项目,类库名称为CalculateWcfService. 3.创建服务契约 WCF采用基于契约的交互方式实现了服务的自制.服务契约:是相关操作的集合.契约就是双方或多方就某个关注点达成的一种共识,是一方向另一方的一种承诺.签署了某个

[Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端(续)

前言 本篇是承接上一篇: [Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端 在上一篇粗略地介绍了如何使用Top-Down的方式创建一个web service .  但是对于如何部署及调用,以及一些细节的部分基本上没有介绍. 应某些博友的要求, 也适逢自己有空, 接下来就详细介绍一下整个部分如何进行. 环境准备 JDK 肯定要安装了, 这个就不多讲了. 1. eclipse  3.5.2 对eclipse 版本的要求其实不是很严