.net - 开发/调试 Windows 服务的最简单方法

标签 .net vb.net debugging windows-services

我正在 VB.NET 2008 中开发 Windows 服务,但我觉得我将要患上动脉瘤。为了调试服务,我在初始化代码中添加了 15 秒的等待时间,这让我有时间启动服务并在发生任何事情之前附加 .NET 调试器,这样我就可以点击断点等。我真的很怀念使用这种解决方法的“集成”调试,并且测试似乎是一个巨大的痛苦。

对正在开发的 Windows 服务进行“常规”调试的最佳方法是什么?我考虑过的一个选择是将我的所有逻辑移到一个 DLL 项目中,只在服务本身中留下控制逻辑,然后创建一个基本上只有“开始”和“停止”按钮的 Forms 项目,然后调用DLL 来做其他所有事情。这样,我可以正常调试我的代码,然后在 DLL 准备好时部署已编译的服务。

这有意义/惹恼其他人吗?我愿意接受任何可用的解决方法。 PB的建议here听起来像我要问的 - 有没有人使用过这种方法?

最佳答案

如果你能处理一点 C#,这就是我做的方式。

假设您有一个从 ServiceBase 派生的类 MainService 和 onStart 方法,那么当不在调试器内运行时,服务正常启动,否则手动调用 onStart 以在控制台模式下运行代码。

static void Main(string[] args)
{
       // If no command line arguments, then run as a service unless we are debugging it.
       if ( args.Length == 0) 
       {
            if (System.Diagnostics.Debugger.IsAttached)
            {
                 System.Diagnostics.Debugger.Break();
                 args = new string[] { "/NonService"} ;
            }
          else
                 args = new string[] { "/Service"} ;
       }

       string cmdLine = args[0].ToLower().Substring(1);
       Console.WriteLine("Starting Program with Cmdline : " + args[0]);
       switch (cmdLine)
       {
           case "service" :
               ServiceBase.Run(new MainService());
               break;

           case "nonservice" :
               MainService ms = new MainService();
               ms.OnStart(null);
               break;

         ...

         default :
            Console.Error.WriteLine("Unknown Command line Parameter");
            Console.Error.WriteLine("Supported options are /Install /Uninstall /Start /Stop /Status /Service and /NonService");
         }

关于.net - 开发/调试 Windows 服务的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1128164/

相关文章:

c# - 检查两个 List<T> 是否相等的最快方法

vb.net - 错误:基于opencv的应用程序开发

c# - 如何开始在 .NET 中创建应用程序 API

debugging - 通过打印变量在 Kohana 中轻松调试?

javascript - 第一个 XMLHttpRequest 失败但仅在 IE9 上

.net - 从 Spring.NET xml 配置访问 ConfigurationManager.AppSettings 值

c# - 如何验证 MVC 上的 RadioButton?

debugging - 调试有帮助吗?

c# - 将控制台输出重定向到单独程序中的文本框

css - 当我添加转发器时,ASP.net Webforms runat 服务器调用不起作用