You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:57:32