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

.NET Core 2控制台应用作为Windows服务启动报Error 1053错误求助

解决.NET Core 2控制台应用作为Windows服务启动时Error 1053的问题

我帮你梳理下这个问题的核心原因和解决步骤,你遇到的Error 1053本质是普通控制台程序没法直接作为Windows服务运行——Windows服务要求程序能响应系统的启动、停止等生命周期信号,而且你的服务创建命令也存在错误,下面一步步来解决:

核心问题分析

  1. 你的控制台程序执行完Main方法就直接退出了,Windows服务需要程序持续运行并响应控制请求,系统因此判定它"未及时响应",抛出1053错误。
  2. 你创建服务时的binpath直接指向了DLL文件,Windows服务无法直接执行.NET Core DLL,必须通过dotnet.exe来托管运行。

解决方案步骤

1. 改造控制台程序,添加Windows服务支持

首先给项目添加必要的NuGet包,再把程序改造为符合Windows服务生命周期的结构:

  • 打开NuGet包管理器,安装Microsoft.Extensions.Hosting和Microsoft.Extensions.Hosting.WindowsServices(选择与.NET Core 2.x兼容的版本,比如2.2.0)
  • 修改你的Program.cs代码,使用HostBuilder托管后台服务:
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace ConsoleApplicationService
{
    class Program
    {
        static void Main(string[] args)
        {
            // 构建并运行服务主机
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseWindowsService() // 启用Windows服务模式
                .ConfigureServices((context, services) =>
                {
                    // 添加后台工作服务
                    services.AddHostedService<WorkerService>();
                });
    }

    // 后台服务类,处理持续运行的业务逻辑
    public class WorkerService : BackgroundService
    {
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            var logPath = Path.Combine(AppContext.BaseDirectory, "log.txt");
            
            // 记录启动日志
            File.AppendAllText(logPath, $"[{DateTime.Now}] 服务已启动\n");

            // 持续运行直到收到停止信号
            while (!stoppingToken.IsCancellationRequested)
            {
                File.AppendAllText(logPath, $"[{DateTime.Now}] 服务正在运行...\n");
                await Task.Delay(1000, stoppingToken); // 模拟业务延迟
            }

            // 记录停止日志
            File.AppendAllText(logPath, $"[{DateTime.Now}] 服务已停止\n");
        }
    }
}

2. 重新发布程序

确保以Release模式重新发布,发布目标可以选"可移植"或对应你系统的运行时(比如win-x64)。

3. 正确创建Windows服务

你之前的sc create命令有误,必须指定dotnet.exe的路径加上你的DLL路径。注意路径中的空格需要用引号包裹,正确命令示例:

sc create "myDev Console Service" binpath= "\"C:\Program Files\dotnet\dotnet.exe\" \"C:\inetpub\wwwroot\myDev.ConsoleApplicationService\ConsoleApplicationService.dll\""

小提示:binpath=后面必须跟一个空格,这是sc命令的语法要求;如果你的dotnet.exe在系统PATH中,也可以简化为binpath= "dotnet \"C:\inetpub\wwwroot\myDev.ConsoleApplicationService\ConsoleApplicationService.dll\""

4. 配置服务权限(可选但重要)

默认Windows服务使用LocalService账户,可能没有权限写入你的发布文件夹。你可以:

  • 右键服务 -> 属性 -> 登录 -> 选择Local System账户(测试用,生产环境建议使用专用服务账户)
  • 或者给发布文件夹添加服务账户的读写权限

验证

完成以上步骤后,尝试启动服务:

sc start "myDev Console Service"

然后查看发布文件夹里的log.txt,应该能看到启动和运行的日志,服务也能正常持续运行了。

内容的提问来源于stack exchange,提问作者Sugeshan Govindsamy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:59:08