只有累積,沒有奇蹟

2019年4月15日 星期一

[.NETCore] Windows 如何更新環境變數 Environment Variable

問題
在上一篇 ASP.NET Core - ENVIRONMENT 提到可以設定環境變數  ASPNETCORE_ENVIRONMENT  ,然後代碼中可以依據所設定的環境變數作相對應的邏輯處理,舉例來說如果是 Production 環境的話就關閉錯誤訊息畫面、產生系統監控...等行為,一般來說設定完環境變數 Environment Variable 都需要重啟電腦讓設定值生效,但是如果在 Production 機器可能有多個站台架設在同主機時,重啟勢必會造成其他服務中斷狀況發生,這一篇就分享如何設定完環境變數後不用重啟的方法,若有問題或是錯誤的地方歡迎各位高手給予指導

如何解決 
首先,建立新專案並加入下列代碼,此代碼主要用途為顯示目前環境變數 Environment Variable 中  ASPNETCORE_ENVIRONMENT  所設定的值並透過 console write 顯示出來 
  1. using System;
  2.  
  3. namespace CoreConsoleApp
  4. {
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. Console.WriteLine($"EnvironmentVariable is : {Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}");
  10. Console.ReadKey();
  11. }
  12. }
  13. }
目前系統中  ASPNETCORE_ENVIRONMENT  設定的值為 Development,因此在輸出值為 Development 
接著,我們把系統變數  ASPNETCORE_ENVIRONMENT  更新成 Production,在執行一次結果如下
可以發現輸出的值由於 Windows cache 的關係,並不會更新為 Production,過去遇到此問題時重新啟動電腦就可以抓到最新設定的值,但今天發現另一個方法可以不用重啟電腦達到相同效果,步驟如下
Step 1 : 開啟 cmd.exe
Step 2 : 輸入指令  refreshenv 
  1. Microsoft Windows [版本 10.0.17763.437]
  2. (c) 2018 Microsoft Corporation. 著作權所有,並保留一切權利。
  3.  
  4. C:\Users\marcustung\source\repos\CoreConsoleApp\CoreConsoleApp>refreshenv
  5. Refreshing environment variables from registry for cmd.exe. Please wait...Finished..
Step 3 : 關閉在重開 Visual Studio 2019,開啟後重新執行 console application 
成功輸出環境變數值 Production !

備註 : 使用  refreshenv  指令需先安裝 chocolatey,否則會找不到該指令 (謝謝 Jake 提醒 !! )

感想
這邊只是透過 Console Demo 執行  refreshenv  指令效果,在 Production 機器上如果是 IIS 站台或是應用程式集區可以停止後重新啟動來讀取最新環境變數值資訊,如果有遇到相同問題的朋友不妨參考看看此做法,就不用重新開機影響到同站台其他 Application 服務  :)

參考
Is there a command to refresh environment variables from the command prompt in Windows?

Related Posts:

  • [.NETCore] Windows Service - 服務並未以適時的方式回應啟動或控制請求。前言 在上一篇有提到如何使用指令 註冊 Window Service 服務,提到了如何用指令操作 Windows Service 看啟用的狀態,但有時在啟動時會發生錯誤造成啟動失敗的狀況發生,舉例來說在啟動服務時跳出  'Windows 無法啟動,本機電腦的 TestService 服務,錯誤 1503 : 服務並未已適時的方式回應啟動獲控制請求。 這篇要說明的是在註冊服務當下發生異常的處理方式,若有問題歡… Read More
  • [NETCore] 結構化日誌 Serilog - 配置設定 前言 上一篇在 結構化日誌 Serilog 初體驗 介紹了關於 Serilog 的基本操作,這篇是針對 Serilog 在 ASP.NET Core 的設定與 Config 做進一步的介紹,若有問題或是錯誤的地方歡迎提出來一起討論或是給予指導。 基本使用 首先先來回顧一下基本使用方式,在 Serilog 如果要紀錄 Log 資訊必須使用  LoggerConfiguration&n… Read More
  • [.NETCore] ASP.NET Core 環境佈署設定 appsettings.json 前言 在上一篇 [.NETCore] ASP.NET Core - ENVIRONMENT 提到了如何設定環境變數值,今天要提的也是與 Configuration 相關的,在開發時往往會因為不同環境讀取不同 Config 的需求,舉例來說如果 Development 與 Staging 環境的資料庫不同時,就會有在不同環境讀取各自的 DB 連線字串設定需求,這篇就介紹如何透過 .NET Core 專案預設的 appsettin… Read More
  • [NETCore] 結構化日誌 Serilog 初體驗前言 在 .NET 使用日誌框架第一時間會想到 NLog 或是 Log4Net 兩種 Log 常使用的 Library,Serilog 是這幾年快速崛起的 Log 框架之一,Serilog 是以 Structured logging 為基礎進行設計,透過 logging API 可以輕鬆的記錄應用程式中對象屬性,方便快速進行 logging 內容進行查詢與分析,並將其紀錄內容透過 json (可指定) 的方式輸出,這篇就介紹 … Read More
  • [NETCore] 結構化日誌 Serilog - Events Types 和 Enrichment 前言 前兩篇分別介紹了關於 Serilog 的基礎應用與設定,這篇就來針對事件類型 Event Type 與 介紹幾個常用的 Enricher,若有問題或是錯誤的地方歡迎提出來一起討論。 Event Type 結構化日誌的好處是可以清楚的分辨"每一次"紀錄的事件,舉例來說下列簡單的代碼是透過 Serilog 寫入log 到 Console 與 File 檔案,紀錄內容是 3 筆資料 Log.Logger = new LoggerCo… Read More

3 則留言:

  1. 沒有這個指令 refreshenv

    回覆刪除
    回覆
    1. BTW, 測試 DOTNETCORE 重啟IIS APP POOL沒有用, 應該是 CORE不給IIS託管

      刪除
  2. Hi Jake, 內文未說明指令 refreshenv 需要先安裝 chocolatey 才可執行,已補上相關說明,謝謝你的提醒 :)

    回覆刪除

Copyright © 2025 m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com