我编写了自己的程序,目的是将其作为后台服务运行(
Windows Service
),而不是作为应用程序。
我从向导创建了默认程序(https://learn.microsoft.com/en-us/dotnet/core/extensions/workers),对其进行了一些更改,但是当我想运行时
sc.exe
(当然在PowerShell 管理员)该程序始终标记为“正在启动”。还尝试了 Win+R -> services.msc
(或在 Windows 搜索栏中输入 Services
),但我无法将我的程序标记为 Running
。
Windows 中没有任何问题
Event viewer
(Windows 日志 -> 应用程序)
sc.exe create "MyService" binPath= "<Target location>\MyProgram.exe"
sc.exe start "MyService"
sc.exe query "MyService"
// 检查服务状态(启动、运行、停止)
sc.exe stop "MyService"
sc.exe delete "MyService"
我可以在终端中运行它,但无法以
sc.exe
的方式运行它。我什至创建了一个全新的程序(添加新项目 -> 使用 SDK 8.0 .net 的工作服务)并且仍然:
The service did not respond to the start or control request in a timely fashion
.
我尝试更改 Windows 启动超时设置、修复注册表,但没有任何帮助。
请勿更改 Windows 设置中的任何内容。你的
Program.cs
有问题。
只需更改:
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddHostedService<Worker>();
var host = builder.Build();
host.Run();
到
var builder = Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.AddHostedService<Worker>();
})
.UseWindowsService(options =>
{
options.ServiceName = "myName";
});
var host = builder.Build();
host.Run();