以Windows服务方式运行ASP.NET Core程序

简介: 原文:以Windows服务方式运行ASP.NET Core程序我们对ASP.NET Core的使用已经进行了相当一段时间了,大多数时候,我们的Web程序都是发布到Linux主机上的,当然了,偶尔也有需求要发布到Windows主机上,这样问题就来了,难道直接以控制台形式运行这个Web程序吗? 直接...
原文: 以Windows服务方式运行ASP.NET Core程序

我们对ASP.NET Core的使用已经进行了相当一段时间了,大多数时候,我们的Web程序都是发布到Linux主机上的,当然了,偶尔也有需求要发布到Windows主机上,这样问题就来了,难道直接以控制台形式运行这个Web程序吗?

直接以控制台形式运行程序当然是可以的,但有以下问题:

  1. 需要敲命令行(这个可以通过制作一个快捷方式解决)
  2. 用户也许会说有一个“黑黑的DOS窗口”,很奇怪
  3. 用户可能会随手把这个“黑黑的DOS窗口”关掉导致程序结束
  4. 不能够自动地随系统启动,得用户登录后再跑程序

如果我们把程序以Windows服务的方式来运行,那以上这些问题都没有了。

微软官方有篇文章,关于如何做这个事情的:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-2.1

我也主要是参考了这篇文章,但其中还有些小小的坑,本文将会提到。OK,Let's get down to work.

包与生成目标

生成目标当然选择最新的.NET Core 2.1了,包则需要引入Microsoft.AspNetCore.Hosting.WindowsServices,最新版是2.1.1(2018/6/19更新,不就是今天嘛),如果你尝试使用最新的2.1.1版,那会出问题,报依赖冲突,你根据报错内容把ASP.NET 2.1.0升级到ASP.NET 2.1.1去,但依旧会出现问题:

It was not possible to find any compatible framework version
The specified framework 'Microsoft.AspNetCore.All', version '2.1.1' was not found.

看来需要安装新的SDK才行,但微软官网最新的正式版SDK就是2.1.300啊,这个还是等等吧,好,果断把版本降回2.1.0,这回没问题了。

修改Main入口

简单,非常简单,把Run改为RunAsService即可。

但这样会导致新的问题,你在开发过程中调试程序的时候会出现这样的错误:Cannot start service from the command line or a debugger. A Windows Service must first be installed and then started with the ServerExplorer, Windows Services Administrative tool or the NET START command. 程序跑不起来,意思显而易见,所以我们在调试中还是要以普通的Run方式。所以改成这样:

    IWebHost host = WebHost.CreateDefaultBuilder(args)
        .UseKestrel(options => { options.Listen(IPAddress.Any, 5201); }) //5201是我用的端口,你改成自己的
        .UseStartup<Startup>() //使用Startup配置类
        .Build();
    bool isService = !(Debugger.IsAttached || args.Contains("--console")); //Debug状态或者程序参数中带有--console都表示普通运行方式而不是Windows服务运行方式
    if (isService) {
        host.RunAsService();
    }
    else {
        host.Run();
    }

配置服务

ASP.NET Core publish生成的目标中并不包含exe文件,所以按照官网文档去弄的话可能会卡住,这是正确的姿势:

sc create MyService binPath= "\"C:\program files\dotnet\dotnet.exe\" \"D:\Services\MyService.dll\"" DisplayName= "MyService" start= auto

注意1:必须以管理员身份运行上面命令
注意2:binPath参数、DisplayName参数及start参数的等号后面必须带一个空格(官网文档也特别提起了这点)

启动服务:

sc run MyService

停止服务:

sc stop MyService

卸载服务:

sc delete MyService

其它

默认情况下,Windows系统服务是以system用户身份运行的,如果你需要切换身份运行,可以在“控制面板 - 管理工具 - 服务”中找到MyService,打开属性面板,在“登录”Tab中指定特定身份。

目录
相关文章
|
5月前
|
开发框架 监控 安全
Windows Defender 导致 Web IIS 服务异常停止排查
某日凌晨IIS服务异常停止,经查为Windows Defender安全补丁KB2267602触发引擎更新,导致系统资源波动,进而引发应用池回收。确认非人为操作,系统无重启。通过分析日志与监控,定位原因为Defender更新后扫描加重负载。解决方案:将IIS及.NET相关路径添加至Defender排除列表,避免业务影响。
625 116
|
5月前
|
开发框架 .NET C#
ASP.NET Core Blazor 路由配置和导航
大家好,我是码农刚子。本文系统介绍Blazor单页应用的路由机制,涵盖基础配置、路由参数、编程式导航及高级功能。通过@page指令定义路由,支持参数约束、可选参数与通配符捕获,结合NavigationManager实现页面跳转与参数传递,并演示用户管理、产品展示等典型场景,全面掌握Blazor路由从入门到实战的完整方案。
463 6
|
12月前
|
Linux iOS开发 MacOS
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
347 0
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2214 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
开发框架 算法 中间件
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
343 1
|
Windows 网络协议
WINDOWS 2012 CORE SERVER也不是那么无情啦
配置IP是纯DOS风格, 但是在配置时区的时候,还是会跳出GUI界面的。 网上还有在CMD和GUI之间随意切换的方案呢。 如果CORE模式支持安装软件的话,我想以后这会是我的服务器首选方案。 但网上说它只支持AD,DHCP,DNS,FILESERVER, 不会吧???
1007 0
|
5月前
|
安全 数据安全/隐私保护 虚拟化
Windows Server 2022 中文版、英文版下载 (2025 年 10 月更新)
Windows Server 2022 中文版、英文版下载 (2025 年 10 月更新)
1209 2
Windows Server 2022 中文版、英文版下载 (2025 年 10 月更新)
|
5月前
|
安全 Unix 物联网
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 10 月更新)
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 10 月更新)
531 0
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 10 月更新)
|
5月前
|
存储 SQL 人工智能
Windows Server 2025 中文版、英文版下载 (2025 年 10 月更新)
Windows Server 2025 中文版、英文版下载 (2025 年 10 月更新)
737 0
|
6月前
|
运维 安全 网络安全
Windows Server 2019拨号“找不到设备”?Error 1058解决指南
Windows Server 2019拨号报错1058?别急!这不是硬件故障,而是关键服务被禁用。通过“服务依存关系”排查,依次启动“安全套接字隧道协议”“远程接入连接管理”和“路由与远程访问”服务,仅需4步即可恢复PPPoE或VPN拨号功能,轻松解决网络中断问题。
502 1