asp.net core3.1修改代码以支持windows服务发布
实际上官网也已经给出了一个步骤:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-3.1&tabs=visual-studio
但是我这边测试了一下,感觉好像不行,于是按自己的思路进行了实现,具体操作步骤如下
一、引入nuget
需要引入如下两个包:
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="3.1.21" /> <PackageReference Include="Microsoft.Extensions.Logging.EventLog" Version="3.1.21" />
二、调整Program文件
首先需要引入命名空间:using Microsoft.Extensions.Hosting;
然后调整代码如下:
public static IHostBuilder CreateHostBuilder(string[] args) { var host = Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); if (!(args.Contains("--console") || Debugger.IsAttached)) { var pathToExe = Process.GetCurrentProcess().MainModule.FileName; var pathToContentRoot = Path.GetDirectoryName(pathToExe); Directory.SetCurrentDirectory(pathToContentRoot);//指定当前工作目录,不然会被定义到system32下面去 host.UseWindowsService();//核心代码 } return host; }
三、发布
编译成功之后就需要发布到windows服务,打开命令窗口执行如下命令:
sc.exe create siteinfo BinPath=E:\duanjt\SiteInfo\trunk\SiteInfo\SiteInfo\bin\Release\netcoreapp3.1\SiteInfo.exe
注意:是sc.exe。博主看有的地方使用的sc,但是博主尝试多次都没有成功。另外,如果路径中包含空格,请使用引号""包含。(后来发现如果是powershell就需要sc.exe。dos可以不用exe后缀)
启动/停止/删除服务
net start siteinfo//启动服务 net stop siteinfo//停止服务 sc.exe delete siteinfo //卸载服务
四、制作bat文件
输入命令有时候会比较繁琐,因此我们可以制作成批处理文件放到exe文件同级,安装.bat 内容如下:
@echo off @title 安装工位管理系统 @echo off echo= 安装服务! @echo off @sc create siteinfo binPath= "%~dp0SiteInfo.exe" echo= 启动服务! @echo off @sc start siteinfo @echo off echo= 配置服务! @echo off @sc config siteinfo start= AUTO @echo off echo= 成功安装、启动、配置服务! @pause
注意:bat文件的编码必须是ANSI,否则可能出现乱码
分类:
编程语言 / .net core
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
2017-11-16 Java模拟POST请求发送二进制数据