只有累積,沒有奇蹟

2019年4月15日 星期一

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

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

如何解決 
首先,建立新專案並加入下列代碼,此代碼主要用途為顯示目前環境變數 Environment Variable 中  ASPNETCORE_ENVIRONMENT  所設定的值並透過 console write 顯示出來 
using System;

namespace CoreConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine($"EnvironmentVariable is : {Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}");
            Console.ReadKey();
        }
    }
}
目前系統中  ASPNETCORE_ENVIRONMENT  設定的值為 Development,因此在輸出值為 Development 
接著,我們把系統變數  ASPNETCORE_ENVIRONMENT  更新成 Production,在執行一次結果如下
可以發現輸出的值由於 Windows cache 的關係,並不會更新為 Production,過去遇到此問題時重新啟動電腦就可以抓到最新設定的值,但今天發現另一個方法可以不用重啟電腦達到相同效果,步驟如下
Step 1 : 開啟 cmd.exe
Step 2 : 輸入指令  refreshenv 
Microsoft Windows [版本 10.0.17763.437]
(c) 2018 Microsoft Corporation. 著作權所有,並保留一切權利。

C:\Users\marcustung\source\repos\CoreConsoleApp\CoreConsoleApp>refreshenv
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?

3 則留言:

  1. 沒有這個指令 refreshenv

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

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

    回覆刪除

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

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com