1. 程式人生 > >以Windows服務方式執行ASP.NET Core程式

以Windows服務方式執行ASP.NET Core程式

我們對ASP.NET Core的使用已經進行了相當一段時間了,大多數時候,我們的Web程式都是釋出到Linux主機上的,當然了,偶爾也有需求要釋出到Windows主機上,這樣問題就來了,難道直接以控制檯形式執行這個Web程式嗎?

直接以控制檯形式執行程式當然是可以的,但有以下問題:

  1. 需要敲命令列(這個可以通過製作一個快捷方式解決)
  2. 使用者也許會說有一個“黑黑的DOS視窗”,很奇怪
  3. 使用者可能會隨手把這個“黑黑的DOS視窗”關掉導致程式結束
  4. 不能夠自動地隨系統啟動,得使用者登入後再跑程式

如果我們把程式以Windows服務的方式來執行,那以上這些問題都沒有了。

我也主要是參考了這篇文章,但其中還有些小小的坑,本文將會提到。OK,Let's get down to work.

包與生成目標

生成目標當然選擇最新的.NET Core 2.1了,包則需要引入Microsoft.AspNetCore.Hosting.WindowsServices,最新版是2.1.1(2018/6/19更新,不就是今天嘛),如果你嘗試使用最新的2.1.1版,那會出問題,報依賴衝突,你根據報錯內容把ASP.NET 2.1.0升級到ASP.NET 2.1.1去,但依舊會出現問題:

It was not possible to find any compatible framework version
The specified framework 'Microsoft.AspNetCore.All', version '2.1.1' was not found.

看來需要安裝新的SDK才行,但微軟官網最新的正式版SDK就是2.1.300啊,這個還是等等吧,好,果斷把版本降回2.1.0,這回沒問題了。

修改Main入口

簡單,非常簡單,把Run改為RunAsService即可。

但這樣會導致新的問題,你在開發過程中除錯程式的時候會出現這樣的錯誤:Cannot start service from the command line or a debugger. A Windows Service must first be installed and then started with the ServerExplorer, Windows Services Administrative tool or the NET START command. 程式跑不起來,意思顯而易見,所以我們在除錯中還是要以普通的Run方式。所以改成這樣:

    IWebHost host = WebHost.CreateDefaultBuilder(args)
        .UseKestrel(options => { options.Listen(IPAddress.Any, 5201); }) //5201是我用的埠,你改成自己的
        .UseStartup<Startup>() //使用Startup配置類
        .Build();
    bool isService = !(Debugger.IsAttached || args.Contains("--console")); //Debug狀態或者程式引數中帶有--console都表示普通執行方式而不是Windows服務執行方式
    if (isService) {
        host.RunAsService();
    }
    else {
        host.Run();
    }

配置服務

ASP.NET Core publish生成的目標中並不包含exe檔案,所以按照官網文件去弄的話可能會卡住,這是正確的姿勢:

sc create MyService binPath= "\"C:\program files\dotnet\dotnet.exe\" \"D:\Services\MyService.dll\"" DisplayName= "MyService" start= auto

注意1:必須以管理員身份執行上面命令
注意2:binPath引數、DisplayName引數及start引數的等號後面必須帶一個空格(官網文件也特別提起了這點)

啟動服務:

sc run MyService

停止服務:

sc stop MyService

解除安裝服務:

sc delete MyService

其它

預設情況下,Windows系統服務是以system使用者身份執行的,如果你需要切換身份執行,可以在“控制面板 - 管理工具 - 服務”中找到MyService,開啟屬性面板,在“登入”Tab中指定特定身份。

相關推薦

Windows服務方式執行ASP.NET Core程式

我們對ASP.NET Core的使用已經進行了相當一段時間了,大多數時候,我們的Web程式都是釋出到Linux主機上的,當然了,偶爾也有需求要釋出到Windows主機上,這樣問題就來了,難道直接以控制檯形式執行這個Web程式嗎? 直接以控制檯形式執行程式當然是可以的,但有以下問題: 需要敲命令列(這個

Windows服務方式執行.NET Core程式

在之前一篇部落格《以Windows服務方式執行ASP.NET Core程式》中我講述瞭如何把ASP.NET Core程式作為Windows服務執行的方法,而今,我們又遇到了新的問題,那就是:我們的控制檯程式,也就是普通的.NET Core程式(而不是ASP.NET Core程式)如何以服務的方式執行

Windows 服務中託管 ASP.NET Core專案

1. 工程建立 工程目標框架可為 .NetFramework 或 .NetCore,模板為 .NetCore下的API工程,正常編寫工程程式碼即可 2.轉換專案為Windows服務 修改 Properties 下 launchSettting.json 檔案,

使用服務程序啟動asp.net core程式

昨天在PuTTY中啟動了測試網站,因為時間太晚,看到效果,立馬關機睡覺,剛上床又想看看手機端訪問效果,結果一開啟,發現nginx找不到頁面,意識到應該是退出PuTTY導致程序結束,於是今天趕緊查瞭解決方法,那就是使用服務程序啟動,這樣關閉遠端連線也可以繼續,下面是參考的網頁: https://docs.mic

windows IIS服務商配置asp.net core服務器壞境,並部署

失敗 nload 界面 技術分享 sop load otn 連接 png 翻譯自https://docs.microsoft.com/en-us/aspnet/core/publishing/iis 支持的操作系統: windows 7或更新 windows server

Windows + IIS 環境部署Asp.Net Core App

onf 但我 其中 run 啟用 包含 如果 來安 傳遞 環境:Windows Server 2012, IIS 8, Asp.Net Core 1.1. 不少人第一次在IIS中部署Asp.Net Core App的人都會遇到問題,會發現原來的部署方式無法運行Asp.Net

服務介紹及Asp.net Core實戰項目系列之微服務介紹

管理 col 數據強一致性 pan 基於 數據存儲 tlab fdm 人的 0、目錄 整體架構目錄:ASP.NET Core分布式項目實戰-目錄 一、微服務選型 在做微服務架構的技術選型的時候,以“無侵入”和“社區活躍”為主要的考量點,將來升級為原子服務架構、量子

ASP.NET Core 中文文件 第二章 指南(5) 在 Nano Server 上執行ASP.NET Core

注意:本教程使用 Windows Server Technical Preview 5 的預發行版本的 Nano Server 安裝選項。 你可以在虛擬硬碟映像中用來內部演示和評估,但不能在生產環境中使用該軟體。可通過 https://go.microsoft.com/fwlink/?LinkId=624

ZookeeperWindows服務安裝執行

1.下載的Zookeeper是.cmd的批處理命令執行的,預設沒有提供以windows服務的方式執行的方案   下載地址:http://zookeeper.apache.org/ 2.下載prunsrv  3.解壓後複製檔案    64位機器用amd64/prunsrv.exe   a. 複製 commo

ASP.NET Core 程式啟動前執行你的程式碼

一、前言 在進行 Web 專案開發的過程中,可能會存在一些需要經常訪問的靜態資料,針對這種在程式執行過程中可能幾乎不會發生變化的資料,我們可以嘗試在程式執行前寫入到快取中,這樣在系統後續使用時就可以直接從快取中進行獲取,從而減緩因為頻繁讀取這些靜態資料造成的應用資料庫伺服器的巨大承載壓力。 既然需要在程式執行

用最簡單的方式ASP.NET Core應用中實現認證、登入和登出

在安全領域,認證和授權是兩個重要的主題。認證是安全體系的第一道屏障,是守護整個應用或者服務的第一道大門。當訪問者請求進入的時候,認證體系通過驗證對方的提供憑證確定其真實身份。認證體系只有在證實了訪問者的真實身份的情況下才會允許其進入。ASP.NET Core提供了多種認證方式,它們的實現都基於相同的認證模型。

不用虛機不用Docker使用Azure應用服務部署ASP.NET Core程式

一般我們寫好了應用程式想要部署釋出它,要麼釋出到物理機,要麼釋出到虛擬機器,要麼釋出到容器來執行它。現在有了Azure應用服務,我們可以完全不用管這些東西,只管寫好自己的程式碼,然後使用VisualStudio的釋出功能就可以一鍵部署了。如果你覺得效能不夠用了還可以自動擴容,彈性伸縮。 ## 應用服務概述 A

Asp.Net Core 程式部署到Linux(centos)生產環境(二):docker部署

執行環境 照例,先亮環境;軟體的話我這裡假設你已經批准好了.net core 執行環境,未配置可以看我的這篇[linux(centos)搭建.net core 執行環境] 騰訊雲 centos:7.2 cpu:1核 2G記憶體 1M頻寬 docker:18.06.1-ce 安裝dock

使用Docker Compose為ASP.NET Core程式新增MySQL資料庫

本文翻譯自: Adding MySQL to ASP.NET Core App With Docker Compose           之前的例子中我們將程式進行容器化,本文我們會把MySQL資料庫作為另一個Container,用於程式的訪問。因為現

關於在IIS伺服器上執行asp.net Web程式出現下面 “Could not load file or assembly。。。”問題的

Could not load file or assembly 'System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of

給你的 ASP.NET Core 程式插上 Feature Flag 的翅膀

前言 我們知道,目前大多數應用程式在正式釋出到生產環境之前都會經歷多個不同的測試環境,通過讓應用程式在多個不同的環境中執行來及時發現並解決問題,避免在線上發生不必要的損失。這是對於整個軟體的釋出流程來講。但是如果想讓我們的應用程式在線上環境中通過滿足一些動態條件(比如電商平臺在某一時間段的促銷活動)從而能

ASP.Net Core MVC 網站在Windows服務器跑步起來

tin 2.0.8 ack ica 圖片 排查 所有 comm cal 1.vs遠程發布到服務器,瀏覽器訪問,報錯502 2.打開錯誤提示提供的網址參考 3.安裝runtime,sdk,Hosting Bundle Installer,其他操作 .....發現並沒有什麽用(

Core中使用Hangfire 在Asp.Net Core中使用DI的方式使用Hangfire構建後臺執行指令碼 解決 ASP.NET Core Hangfire 未授權(401 Unauthorized)

    之前使用Quartz.Net,後來發現hangfire對Core的繼承更加的好,而且自帶管理後臺,這就比前者好用太多了。 安裝註冊 安裝 PM> Install-Package Hangfire Startup.cs,在ConfigureServices方法中添加註冊:

ASP.NET Core專案基於Windows 服務的打包託管

1. 工程建立 工程目標框架可為 .NetFramework 或 .NetCore,模板為 .NetCore下的API工程,正常編寫工程程式碼即可 2.轉換專案為Windows服務 修改工程的 .csproj 檔案,新增Windows 執行時識別符號 <

ASP.NET Core使用TopShelf部署Windows服務

asp.net core很大的方便了跨平臺的開發者,linux的開發者可以使用apache和nginx來做反向代理,windows上可以用IIS進行反向代理。 反向代理可以提供很多特性,固然很好。但是還有複雜性,我們也可以使用windows service來直接啟動kestrel。 asp.net core