.net core 部署到windows服務上的方法

  • 2019 年 10 月 3 日
  • 筆記

前言

Net core 項目部門在Windows有很多種方式,大致有以下幾種,

  1. dotnet 命令,
  2. iiswindowshosts),
  3. 一些開源的應用容器(docker
  4. 基於一些exe 程式,微軟官網上案例
  5. Nssm 搭建windows服務

其中優劣對比在這不進行累述。我今天是把它搭建到windows服務上的,這種方式對於我們現有dotnet來說相對美觀(一個黑框框,一個看不到),電腦重啟可以自動重啟。

1.實現

1.1.下載nssm

官網http://www.nssm.cc/,下載地址http://www.nssm.cc/download 

1.2.搭建windows 服務

 

找到文件夾下建立的Install.bat 點擊運行彈出操作窗體。

Install.bat內容:

%~d0  cd %~dp0  nssm install NPSWebCoreService  PAUSE

Path選擇系統運行bat—-C:NpsCoreWeb1run.bat

ps:因為我們系統中要特殊處理所以直接執行了bat。此內容正常是填寫C:Program Filesdotnetdotnet.exe. 因為要執行dotnet命令,我這些操作實在bat中執行的。

Startup directorybat 所在目錄不用改變

ps:發布項目文件夾的地址。

Arguments為空

ps:項目運行dll:

Service name我寫在install.bat 批處理裡面了,不要改變,因為程式碼中重啟服務我這是寫死的。

ps:創建線管名稱即可,即windows 服務名稱。

然後點擊Install service按鈕就完成了部署。

註:紅色字體為是一般處理方式,非紅色是我們系統中處理的方式

1.2.3 啟動服務

讓後輸入網站就可以訪問了

3. Nssm

3.1.輸入nssm 了解其命令行

3.2.官網http://www.nssm.cc/usage

 

4. 針對與咱們系統的問題的處理方案

 

4.1. 日誌問題,nssm path 文件運行bat 不要運行dotnet.exe. Log4net 配置問題。

4.2. Office 轉換pdf 問題,windows servers 2008 伺服器缺少com組件缺少窗口,我在程式中增加了相關程式碼,如果沒有許可權請手動創建(伺服器2008 r2 ,2016都能創建)

 

https://blog.csdn.net/wyzlwyzl/article/details/48686483

 

4.3.資料庫備份重啟服務問題,改為重啟windows服務,所以請用上面的install.bat運行不要,改變Service name。

重啟服務程式碼:

 try   {      ServiceController service = new ServiceController("NPSWebCoreService");      if (service.Status == ServiceControllerStatus.Running)         {          service.Stop();          service.WaitForStatus(ServiceControllerStatus.Stopped);         }     service.Start();     service.WaitForStatus(ServiceControllerStatus.Running);    }    catch (Exception){}

 

 

4.4.netcoreweb要基於mysql 服務問題,擔心再啟伺服器的時候,mysql和windows 服務啟動順序的問題,我在啟動bat 中怎麼了判斷mysql服務是否啟動的判斷。

bat 內容:

@echo off    SETLOCAL enabledelayedexpansion  rem 關閉自動輸出  :begin    for /f "skip=3 tokens=4" %%i in ('sc query MySQL') do set "zt=%%i" &goto :next  :next  if /i "%zt%"=="RUNNING" (      echo 已經發現該服務在運行。  ) else (      net start MySQL80      echo 已經發現該服務在運行1。  )    rem 接收輸入  rem 輸出得到的輸入資訊  echo 啟動NPSWebCore    dotnet ./NPSWebCore.dll    @echo 啟動結束  exit