windows服务程序转成控制台程序进行调试

[C#]使用Console(控制台)调试 Windows 服务

  介绍  

      Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合。它没有用户界面,并且也不会产生任何可视输出。任何用户消息都会被写进Windows事件日志。计算机启动时,服务会自动开始运行。它们不要用户一定登录才运行,它们能在包括这个系统内的任何用户环境下运行。通过服务控制管理器,Windows服务是可控的,可以终止、暂停及当需要时启动。

      这里我就不演示如何创建一个Windows服务了,通常我们在写windows服务的时候遇到的最大问题就是如何调试Windows服务,最常用的方式是附加到进程,可这种方式不方便的地方是每次都要附加,非常麻烦,所以我推荐下面一种方式,用控制台来调试Windows服务,具体操作起来也非常简单。

  正文  

      首先将项目设置为,控制台应用程序,点击项目属性,将输出类型设置为“控制台应用程序”,如下图。

        接下来,把一下这段代码,主要建立控制台调用的启动和停止服务的方法,复制到Service.cs (就是你自己建的Service中)。

      
 1  public partial class BIDSservice : ServiceBase
 2     {
 3         /// <summary>
 4         /// BIDS服务
 5         /// </summary>
 6         public BIDSservice()
 7         {
 8             InitializeComponent();
 9         }
10 
11         protected override void OnStart(string[] args)
12         {
13             //1、启动定时器,扫描屏幕连接
14         }
15 
16         protected override void OnStop()
17         {
18         }
19 
20 
21 #if DEBUG
22         /// <summary>
23         /// 调试用
24         /// </summary>
25         /// <param name="args"></param>
26         public void Start(string[] args)
27         {
28             this.OnStart(args);
29         }
30         public void Stop()
31         {
32             this.OnStop();
33         }
34 #endif
35 
36     }

 

      下一步,把下面这段代码复制到解决方案根目录下的,Programs.cs的main方法中。

        
 1  internal static class Program
 2     {
 3         /// <summary>
 4         /// 应用程序的主入口点。
 5         /// </summary>
 6         static void Main()
 7         {
 8             //ServiceBase[] ServicesToRun;
 9             //ServicesToRun = new ServiceBase[]
10             //{
11             //    new BIDSservice()
12             //};
13             //ServiceBase.Run(ServicesToRun);
14 
15 
16        #if DEBUG
17             string[] args = new string[] { " " };
18             BIDSservice x = new BIDSservice(); //这里要替换成你自己服务的名称
19             if (args.Length > 0)
20             {
21                 Console.WriteLine("==========开始使用控制台调试Windows服务==========");
22                 x.Start(args);
23                 Console.ReadLine();
24             }
25             else
26             {
27                 System.ServiceProcess.ServiceBase[] ServicesToRunTemp;
28                 ServicesToRunTemp = new System.ServiceProcess.ServiceBase[] { x
29 };
30                 System.ServiceProcess.ServiceBase.Run(ServicesToRunTemp);
31             }
32         #endif
33 
34 
35         }

 

   

      大功告成,现在就可以把Windows服务当成一个控制台程序来调试了,当然在发布服务的时候还是要把输出类型改回来的。

posted @ 2021-11-25 22:46  Mr웃ZHANG  阅读(45)  评论(0编辑  收藏  举报