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服务当成一个控制台程序来调试了,当然在发布服务的时候还是要把输出类型改回来的。
对于不可控的事情,保持乐观;
对于可控的事情,保持谨慎