我正在 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/