我们正在使用简单的Windows服务
var host = Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(cfg =>
{
cfg.AddConfiguration(Configuration);
cfg.Build().BindConfigurations();
})
.UseSerilog()
.UseWindowsService()
.Build();
host.Run();
这效果很好。问题是,每当 Windows 重新启动时,我们都会看到计划由于这个原因而无法启动,
A timeout was reached (30000 milliseconds) while waiting for the OurScheduler service to connect.
我们怎样才能避免这个错误呢?因为这使得我们选择 .NET Core 作为后台作业存在风险。
我在任务计划中添加了一个观察程序(
.bat
文件),这将使作业正在运行,如果没有则启动作业,
@echo off
for /f "tokens=*" %%a in ('sc query MyWindowsServiceJobName ^| findstr STATE') do set _CmdResult=%%a
if "%_CmdResult%"=="%_CmdResult:RUNNING=%" (
SC START MyWindowsServiceJobName
)