NetCoreWebApi宿成Windows服务
如果你的asp.net core服务最后会安装到Windows上运行,那么你肯定不想每次都开个控制台窗口来运行你的服务,因为这样每次开机你都需要手动打开你的服务,其次控制台窗口也容易被用户关掉,你的服务会意外地被终止运行。
使用下面的方法可以快速地把你的asp.net core程序做成Windows Service服务,这样你就可以让Windows来帮你管理服务了。
安装 Microsoft.Extensions.Hosting.WindowsServices 包
使用下面的命令,为你的asp.net core项目安装 Microsoft.Extensions.Hosting.WindowsServices 包
Install-Package Microsoft.Extensions.Hosting.WindowsServices
或者Nuget中搜索
修改 Program.cs
你要做两件事情,第一为Host增加 UseWindowsServices,第二注掉 config.SetBasePath,因为Windows Service程序的默认文件夹是 c:\windows\system32,在那儿你找不到像appsettings.json这样的依赖文件的,在 UseWindowServices 以后,系统会自动把默认文件夹指向服务中的可执行文件所在的位置。下面是示例代码,注意我们把UseWindowsService放到了所有config的最前面。
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureAppConfiguration((hostingContext, config) => { //config.SetBasePath(Directory.GetCurrentDirectory()); config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); config.AddEnvironmentVariables(); }) .ConfigureLogging(logging => { logging.ClearProviders(); logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace); }) .UseNLog() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseNLog(); webBuilder.UseStartup<Startup>(); });
这一步里主要是UseWindowsService。
发布asp.net core项目
使用下面的命令发布asp.net core项目
dotnet publish pathToYourProject\yourAspNetProject.csproj --self-contained true -r win-x64 -c Release --output pathToYourProject\yourAspNetProject\bin\Release\netcoreapp3.1\publish\
注册Windows Service
使用下面的命令把你的asp.net core可执行文件注册为Windows Service
sc create 你的服务名字 binPath=程序地址精确到某个.exe文件
删除服务
sc delete 你的服务名字
查看服务(所有)
Win+R
然后
services.msc
找到服务,启动
值得一提的是,如果你的程序中有UseStaticFiles
app.UseStaticFiles(new StaticFileOptions() { FileProvider = new PhysicalFileProvider( Path.Combine(Directory.GetCurrentDirectory(), @"Upload")), RequestPath = "/Upload", OnPrepareResponse = (Microsoft.AspNetCore.StaticFiles.StaticFileResponseContext staticFile) => { } });
那你的服务大概率是无法正常启动的。会自动停止,问题再这里,但是怎么解决我没想到。
后面找到解决方案再候补
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析