.NET Core Windows Service启动失败报Error 1053,寻求解决方案
问题:.NET Core Windows服务启动超时失败
环境与代码情况
- 系统:Windows
- 开发工具:Visual Studio 2022
- 技术栈:C# + .NET Core Windows服务
Program.cs 代码
IHost host = Host.CreateDefaultBuilder(args) .ConfigureServices(services => { services.AddHostedService<Worker>(); }) .Build(); await host.RunAsync();
Worker.cs 代码(已简化用于问题排查)
public class Worker : BackgroundService { static int i = 0; private readonly ILogger<Worker> _logger; private void writefile(string textf) { string path = $"C:\Temp\{textf}.txt"; using (StreamWriter sw = File.CreateText(path)) { sw.WriteLine(textf); } } public Worker(ILogger<Worker> logger) { writefile("Worker"); _logger = logger; } public override Task StartAsync(CancellationToken cancellationToken) { writefile("StartAsync"); return base.StartAsync(cancellationToken); } public override Task StopAsync(CancellationToken cancellationToken) { writefile("StopAsync"); return base.StopAsync(cancellationToken); } // ExecuteAsync 留空 protected override Task ExecuteAsync(CancellationToken stoppingToken) { writefile($"ExecuteAsync{i++}"); return Task.CompletedTask; } }
部署与问题现状
- 构建后通过命令行安装服务:
sc create MyService binPath="c:\Visual Studio\bin\debug\myservice.exe",exe目录包含所有依赖DLL - 切换Release版本后问题依旧
- 事件查看器仅显示30秒启动超时错误,无额外详情
- 已尝试:使用个人账户作为服务启动账户、修改注册表超时参数(
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServicePipeTimeout和HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\myservice\StartTimeout)为更大值,但均无效
解决思路
1. 修复文件路径转义错误
Worker.cs中的路径字符串存在C#转义问题:"C:\Temp\{textf}.txt" 里的\T会被解析为转义字符,导致路径无效。修改为两种正确写法之一:
// 转义反斜杠 string path = $"C:\\Temp\\{textf}.txt"; // 或使用逐字字符串 string path = $@"C:\Temp\{textf}.txt";
同时确保C:\Temp目录已创建,且服务启动账户拥有该目录的读写权限。
2. 排查服务账户权限
- 确认服务启动账户拥有:服务exe目录的读取权限、C:\Temp目录的读写权限、「作为服务登录」的权限(可在本地安全策略→本地策略→用户权限分配中配置)
- 临时改用LocalSystem账户测试(权限较高,仅用于排查)
3. 替换文件写入为内置日志排查
文件写入可能因权限或路径问题阻塞服务启动,改用.NET内置日志输出到事件查看器:
public Worker(ILogger<Worker> logger) { _logger = logger; _logger.LogInformation("Worker构造函数执行"); // 暂时移除writefile调用,优先确保服务能启动 }
可在事件查看器的应用程序和服务日志→Microsoft→Windows→DotNETRuntime下查看详细错误信息。
4. 直接运行exe排查基础错误
打开命令提示符,直接执行服务exe:c:\Visual Studio\bin\debug\myservice.exe,.NET Core服务会以控制台模式启动,直接显示报错信息,快速定位基础问题。
5. 检查服务安装命令格式
若exe路径包含空格,需正确嵌套引号转义,例如:
sc create MyService binPath="\"C:\Program Files\MyService\myservice.exe\""
6. 确认.NET Core运行时环境
检查目标机器是否安装了与项目目标框架版本一致的.NET Core运行时,可通过dotnet --info命令查看已安装的运行时列表。
内容的提问来源于stack exchange,提问作者user3292410
相关产品推荐
相关产品推荐

