我正在尝试调试我编写的Windows服务,方法是将其安装为服务,然后使用Visual Studio 2022(版本17.6.4)中的“附加到进程”功能。
下面是我的Program.cs的代码:
var builder = Host.CreateDefaultBuilder(args)
.UseWindowsService(options =>
{
options.ServiceName = "Example Service";
})
.ConfigureServices((context, services) =>
{
services.AddSingleton<MyService>();
services.AddHostedService<WindowsBackgroundService>();
});
IHost host = builder.Build();
host.Run();
下面是WindowsBackgroundService类中的ExecuteAsync函数(应该在host.Run()
之后执行):
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
Thread.Sleep(150000);
var exampleString = "exampleString"; //breakpoint HERE
}
我使用这些选项发布了Windows服务:
我正确安装了服务。
下面是我附加过程的操作:
1.我启动windows服务
1.在Visual Studio中,我从“进程”中选择了“进程”,然后选择了“附加到进程”。
1.从“可用进程”中,我选择我的Windows服务(一旦服务运行,我可以很容易地找到它),然后单击“附加”。
1.我等待断点(在代码中查找注解)到达。
第四步是出错的地方。在我执行步骤1-3几秒钟后,我得到这些错误:
沿着此异常消息:
Unhandled exception at 0x00007FF83E76CF19 (KernelBase.dll) in ExampleService.exe: 0xE0434352 (parameters: 0xFFFFFFFF80131534, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00007FF737E70000).
如何解决这个问题?
1条答案
按热度按时间gev0vcfq1#
就在我发表这篇文章之后,我记得我在微软的教程中读过这篇文章。显然,如果我想用我的方法调试东西,我不能使用单个文件。
所以,我所要做的就是解决这个问题,在配置文件设置中取消勾选“产生单个文件”。它现在按预期工作。
以下是新的配置文件设置,以清晰起见: