由於公司程序前置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