查看: 100|回复: 1

.NET 6 中将 ASP.NET Core 注册成 Windows Service

[复制链接]

2

主题

7

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2022-12-5 10:41:22 | 显示全部楼层 |阅读模式
前言

使用 Visual Studio 中的 Worker Service项目模板:


我们很容易创建出 Windows Service:
IHost host = Host.CreateDefaultBuilder(args)
    .UseWindowsService()
    .ConfigureServices(services =>
    {
        services.AddHostedService<Worker>();
    })
    .Build();

await host.RunAsync();需要引用 NuGet 包Microsoft.Extensions.Hosting.WindowsServices
但是,当我们想把 http://ASP.NET Core 应用注册成 Windows Service 时,却碰到了一些麻烦。
NET6零基础教程

学习.NET6技术,讲解.NET6从入门到实战,解密.ASP.NETCore框架详细揭秘,应用实战实操,.NET6+微服务架构实战,容器技术Docker、WebAPI等揭秘,都是免费的,非常值得学习哟。


本教程16个视频课时,主要以.NET6背景,框架设计,.NET6从入门到精通-代码+脚本+文档展开。从环境准备到ASP.NETCore开发,系统得梳理了各项流程,从零开始了解基于C#语言开发的工具、项目,跟着实操。最终能独立完成基于.NET语言的基本开发。
上面的资料免费自取:

由于内容过多不便呈现,需要视频教程和配套源码的小伙伴,可点击这里,添加我知乎主页个人说明处号码 免费分享
也可直接点击下方卡片:点击后可自动复制威芯号,并跳转到威芯。得辛苦大家自行搜索威芯号添加。内容已做打包,添加后直接发送注意查收!
Demo

创建 http://ASP.NET Core 应用,然后把 Worker Service 中的代码复制过来:
var builder = WebApplication.CreateBuilder(args);

builder.Host.UseWindowsService()
.ConfigureServices(services =>
{
    services.AddHostedService<Worker>();
});

var app = builder.Build();

app.MapGet("/", () => "Hello MyIO!");

app.Run();需要注意的是:与 Worker Service 不同,在 http://ASP.NET Core 应用中,需要通过builder.Host拿到IHostBuilder的实例。
使用sc create注册 Windows Service 成功。
但是在启动时,却提示 1053 错误:


通过事件查看器,我们发现导致错误的原因是当前工作目录是C:\WINDOWS\system32而不是我们的 ASP.NET Core 应用所在目录:


解决方案

1. 修改工作目录

虽然在 Windows Service 属性窗口中不能设置工作目录,但是我们可以在启动时修改当前工作目录:
Directory.SetCurrentDirectory(AppContext.BaseDirectory);
var builder = WebApplication.CreateBuilder(args);2. 设置 ContentRootPath

既然是ContentRootPath不正确导致的错误,那我们就按照错误提示使用 WebApplicationOptions 设置正确的ContentRootPath即可:
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
    ContentRootPath = AppContext.BaseDirectory,
    Args = args
});结论

通过 2 种解决方案,我们都可以成功将 http://ASP.NET Core 应用注册成 Windows Service 并运行。
文章来源My IO。
学习离不开答疑交流,跳槽高薪离不开信息分享,这里给大家推荐个学习群,里面有大佬技术答疑、有直播技术分享、有资料定期分享、还有高薪内推资源,强烈建议大家进群一起学习交流,来年拿高薪。也欢迎大家加入最活跃的编程技术交流群 (.NET/WPF )进学习群,一起学习进步!
回复

使用道具 举报

2

主题

8

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2025-3-28 06:01:02 | 显示全部楼层
前排,哇咔咔
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表