只有累積,沒有奇蹟

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] Polly 的超時 TimeOut 和 Wrap 策略介紹 Polly 是一套 .NET 處理瞬間故障的函式庫,提供開發人員用 Fluent API 方式及 Thread Safe 處理服務瞬間故障的策略,並提供重試(Retry)、斷路(Circuit-breaker)、超時(Timeout)、隔離(Bulkhead Isolation)、緩存(Cache)、回退(Fallback) 等機制,在上一篇 [NETCore] 使用 Polly 實現重試 (Retry) 策略 分享了 … Read More
  • [.NETCore] ASP.Net Core 使用 Big5 中文編碼 問題 在 .NET Framework 時要取得中文編碼可以使用  Encoding.GetEncoding("BIG5"),今天在練習專案時遇到類似的情境很直覺的在將 Code 套用在 .NET Core 上,沒想到竟然發生錯誤,這邊簡單紀錄遇到這問題該怎麼解決以及根本原因,有任何問題歡迎留言一起討論 解決方式  "ArgumentException: 'Big5' is not a support… Read More
  • [.NETCore] ASP.NET Core - Logging 日誌初體驗 (一)前言 在前一篇的文章裡介紹 ASP.Net Core 中如使用 NLog 將日誌紀錄於指定的位置檔案中,在ASP.Net Core 內建 logging framework ,專門負責記錄 log 與提供 API 與第三方紀錄套件像是 NLog、Log4Net 整合搭配使用,這篇文章是閱讀 MSDN 官網的 ASP.NET Core logging 後摘錄重點筆記,若有問題歡迎提出一起討論或是給予指導 使用 I… Read More
  • [NETCore] 使用 Polly 實現重試 (Retry) 策略介紹 在開發時常常都會遇到串接其他 Server 或是第三方服務 API 的需求,當對方伺服器或是第三方服務發生問題時,或許可以在 Log 中看到回應的 HTTP 狀態碼是 404 (Not Found)、503(Service Unavailable)、504(Gateway Timeout)、500(Too Many Requests)...等當下無法正常執行的錯誤訊息,可能發生原因是因為對方 Server 不穩定,或是正在部署新版應用程式,… Read More
  • [.NETCore] ASP.NET Core - Logging 日誌初體驗 (二)前言 在上一篇文章介紹了在 ASP.Net Core 如何使用內建的 logging,以及 ILogger 與 ILoggerFactory 還有篩選記錄的方法,這篇再繼續介紹在 logging 中一些基本觀念與應用,如果有寫不清楚的地方可以搭配 MSDN 官網的 ASP.NET Core logging 一起服用,若有問題歡迎提出一起討論或是給予指導 LogLevel 紀錄 log 時候都會指定紀錄… 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