托管ASP.NET Core应用程序到Windows服务中

时间:2024-11-16 15:03:37

  由于公司程序前置Nginx反向代理,所以在Windows中部署过程中没有采用IIS托管.Net Core应用,一直采用控制台dotnet命令直接运行。但是测试过程中,发现程序内Session一直无法覆盖,可是在打开远程桌面的时候,一切正常,考虑很久,应该是Windows权限相关的问题,本人才疏学浅,没找到问题根源,推测用服务形式启动程序,可以解决这个问题。才有了这篇文章。

  Windows部署下常用的两种方式:

  一、修改目标框架以及启动方式

    https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/windows-service

    这种方式也是官方推荐的一种,通过修改.csproj文件中目标框架和加载Microsoft.AspNetCore.Hosting.WindowsServices模块修改程序启动方式,然后用sc命令创建管理服务。

    实践过程中发现所有引用的类库都要修改,果断放弃,涉及项目类库太多。

  二、通过instsrv创建服务,无需修改代码(个人推荐这种方式)

    https://www.cnblogs.com/zhaiqianfeng/p/4622561.html

    https://www.cnblogs.com/zhushunli/p/6043147.html

    网上这方面文章很多,就不造*了,重点是这种方式适用于任何程序,对程序没有入侵。

    重点来了,通过网友的示例,本人成功运行起服务,已经运行一周,目前来看没有任何问题,但是创建过程比较繁琐。因此本人通过网上的一些资料,编辑了一个创建删除服务的一个批处理程序,分享出来。

    点击下载     

 del.bat             删除服务入口文件(需修改)
install.bat 创建服务入口文件(需修改)
run-del.bat 主文件
run-install.bat 主文件
instsrv.exe 主程序
srvany.exe 主程序

    del.bat 文件

@echo off
cd /d %~dp0
call run-del.bat 服务名称
pause

    install.bat 文件

@echo off
cd /d %~dp0
call run-install.bat 服务名称 文件路径
pause