C#使用Windows Service的简单教程(创建、安装、卸载、调试)

2019-12-30 15:28:05于丽

注意:代码编写完成后,你无法点击通过启动按钮或按F5来运行或调试服务,会弹出如下图所示的警告:

C#,Windows,Service

二、安装windows服务

项目生成成功后,定位到binDebug目录,以管理员身份运行Install.bat安装服务,成功结果如下图:

C#,Windows,Service

这时,“我的电脑”右键,选择“管理”,选择“服务和应用程序”下的“服务”,就可以看到服务已安装,如下图:

C#,Windows,Service

同时,Debug文件夹里有了Logs文件夹,Logs文件夹里有txt文档,内容如下:

C#,Windows,Service

可以看到,每分钟执行一次。

三、调试windows服务

1)通常的处理办法是,在service运行后, 在调试器中选择“附加到进程”,附加自己的服务即可调试。但此法有局限性,例如在service启动时的OnStart事件中的代码, 基本上很难调试,往往当attach到我们的service的时候,这部分代码已经执行过了。当然了,你可以让OnStart事件之前先睡个20s,趁着服务睡觉的时候赶紧“附加到进程”。System.Threading.Thread.Sleep(1000 * 20);

2)我的做法是,在OnStart事件的最开始部分加上“Debugger.Launch();”的调用, 当service运行到此处时,将会弹出一个选择调试器的对话框,同时暂停在当前位置。这样,我们就做到了在代码中手动的启动调试器。

说明:a)Debugger.Launch()方法的作用是“启动调试器并将其连接到进程”;

   b)可以手动设置断点,也可以用“Debugger.Break();”动态设置断点;

   c)为了避免多个调试器实例,可以用“Debugger.IsAttached”属性判断调试器是否已附加到进程,代码片段:

             if (!Debugger.IsAttached) Debugger.Launch();

   d)为了使调试只在Debug模式下生效,Release模式下无效,可以用条件编译来处理,代码片段如下:


#if DEBUG
 if (!Debugger.IsAttached)
 Debugger.Launch();
 Debugger.Break();
 #endif