由于公司程序前置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
网上这方面文章很多,就不造*了,重点是这种方式适用于任何程序,对程序没有入侵。
重点来了,通过网友的示例,本人成功运行起服务,已经运行一周,目前来看没有任何问题,但是创建过程比较繁琐。因此本人通过网上的一些资料,编辑了一个创建删除服务的一个批处理程序,分享出来。
1 del.bat 删除服务入口文件(需修改) 2 install.bat 创建服务入口文件(需修改) 3 run-del.bat 主文件 4 run-install.bat 主文件 5 instsrv.exe 主程序 6 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