Visual Studio 无法使用“附加到进程”调试我的Windows服务

xpcnnkqh  于 2023-10-23  发布在  Windows
关注(0)|答案(1)|浏览(363)

我正在尝试调试我编写的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).

如何解决这个问题?

gev0vcfq

gev0vcfq1#

就在我发表这篇文章之后,我记得我在微软的教程中读过这篇文章。显然,如果我想用我的方法调试东西,我不能使用单个文件。
所以,我所要做的就是解决这个问题,在配置文件设置中取消勾选“产生单个文件”。它现在按预期工作。
以下是新的配置文件设置,以清晰起见:

相关问题