2014-03-27 14 views
0

環境新變量使用變量。SetEnvrionmentVariable的更改無法使用GetEvironmentVaribale讀取,直到重新啓動?

我是編碼項目設置工具,需要在會話中存儲一些用戶指定的項目目錄路徑。 有人建議Get/SetEvironmentVariable。 因此,我設置了一個帶有文本框的Windows窗體來顯示路徑。 當我加載表單時,它使用GetEvironmentVariable,並按預期填充文本框。 但是當我嘗試使用SetEvironmentVariable, 更新值時,textBoxes爲空,並且在重新啓動之前不顯示更新的變量。

private void button1_Click(object sender, EventArgs e) 
    { 
     Environment.SetEnvironmentVariable("my_project_dir", "C:\path\to\my\project" , EnvironmentVariableTarget.Machine); 
     textBox1.Text = Environment.GetEnvironmentVariable("my_project_dir", EnvironmentVariableTarget.Machine); 
    } 
+0

在建議更有經驗的工具編碼器我選擇Apllication設置而不是環境變量。 http://stackoverflow.com/questions/453161/best-practice-to-save-application-settings-in-a-windows-forms-application –

回答

1

這是因爲您將環境變量設置爲機器範圍的變量。有關更多詳細信息,請參見msdn

環境變量存儲或從 HKEY_LOCAL_MACHINE \系統\ CurrentControlSet \控制\會話 經理\環境在Windows操作系統的註冊表鍵檢索。 當用戶在設置操作中創建環境變量時,操作系統將環境變量存儲在系統 註冊表中,但不在當前進程中。如果本地機器上的任何用戶啓動了新進程,操作系統會將註冊表中的 環境變量複製到該進程。

當進程終止時,操作系統銷燬該進程中的環境變量 。但是,註冊表中的環境變量 會一直存在,直到用戶通過操作系統工具將其以編程方式刪除 或 。

最重要的部分是這樣的:

當用戶在一組操作創建環境變量中, 操作系統存儲環境變量在系統 註冊表,但不是在當前進程。

你想要做的,而不是什麼是使用EnvironmentVariableTarget.Process(這是默認的,所以不需要指定任何),將環境變量保存在與當前進程關聯的環境塊。

相關問題