.NET Core 3.1 Worker部署为Windows服务启动失败1053错误求助
部署.NET Core 3.1 Worker作为Windows服务时,启动服务触发错误:
[SC] StartService FAILED 1053: The service did not respond to the start or control request in a timely fashion。
提供的代码与命令
Program类代码:
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); }); }
安装及启动命令:
sc.exe create MyService binpath="C:\MyService.exe" displayname="MyPostWS" start= auto sc.exe start DMSBatchService
排查与解决步骤
1. 修复服务名称不匹配问题
你创建的服务名称是MyService,但启动命令中使用的是DMSBatchService,名称完全不匹配。执行启动命令时必须使用创建时的服务名:
sc.exe start MyService
2. 验证程序可独立运行
直接双击C:\MyService.exe,确认程序能正常启动,无闪退或控制台异常输出。如果程序本身无法运行,服务启动必然失败。若程序闪退,可尝试在命令行中运行C:\MyService.exe,查看控制台抛出的具体异常信息。
3. 检查.NET Core运行时环境
确保目标机器已安装NET Core 3.1 Desktop Runtime(Worker服务依赖Desktop Runtime,而非ASP.NET Core Runtime)。执行以下命令查看已安装的运行时:
dotnet --info
确认输出中包含3.1.x版本的Desktop Runtime,若缺失需前往微软官网下载安装。
4. 确认服务账户权限
默认Windows服务使用LocalSystem账户,若程序需要访问特定资源(如文件、数据库),可能存在权限不足问题:
- 打开服务管理器,找到
MyPostWS服务 - 右键→属性→登录选项卡,选择「此账户」,输入具有足够权限的本地管理员账户及密码,确定后重启服务
5. 添加日志定位启动问题
在Program中配置文件日志,记录启动过程中的细节,方便排查异常。修改CreateHostBuilder方法:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddFile("C:\\MyServiceLogs\\service.log", options => { options.RollingInterval = RollingInterval.Day; }); }) .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); });
需先通过NuGet安装Serilog.Extensions.Logging.File包,提前创建C:\MyServiceLogs文件夹并确保服务账户有写入权限。启动服务后查看日志文件,获取启动失败的具体异常信息。
6. 验证binpath路径正确性
确认C:\MyService.exe实际存在,路径无拼写错误。若路径包含空格,需用双引号包裹(当前命令已符合要求,但仍需再次验证)。
内容的提问来源于stack exchange,提问作者Alex

