gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:07:15 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com