2012-03-19 210 views
8

我有使用C#設置環境變量的問題。C#設置環境變量

我需要在某些情況下修改一些環境變量。例如,我需要修改NDSRC變量。

我用:

Environment.SetEnvironmentVariable("MY_VARIABLE", "value", EnvironmentVariableTarget.Machine); 

這工作得很好。

接下來我運行一些使用變量的腳本。現在有一個問題,因爲腳本沒有看到變量。

示例: 使用

string path = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine) + ";c:\\"; 
Environment.SetEnvironmentVariable("Path", path, EnvironmentVariableTarget.Machine); 

打開窗口的命令行設置路徑變量(在末尾添加一個目錄)(開始 - >運行> cmd.exe的)。

在命令行鍵入cmd

系統無法找到cmd.exe的:「加利福尼亞」不被識別爲一個內部或外部的命令,可操作的程序或批處理文件。

如果您檢查Windows設置 - >環境變量,路徑被正確設置爲新值。如果您檢入打開的命令提示符,它也會被設置。

回答

4

不幸的是,您需要在刷新環境變量之前重新啓動進程。請參閱MSDN post

+1

你好。這不是問題。我使用 Environment.SetEnvironmentVariable(「MY_VARIABLE」,「value」,EnvironmentVariableTarget.Process); 爲我的過程設置環境變量,它工作。問題在於,除了我的過程外,即使我看到更改的變量,其他任何過程似乎都看不到它。在這個例子中,我只是將一些東西添加到Path變量。之後,系統根本看不到路徑變量。 – 2012-03-19 17:36:41

1

通過設計,變量在過程開始時被繼承,並在此之後保持固定。

但是沒有理由不爲了定期閱讀相關注冊表項並手動更新流程的環境變量。實際上,如果您使用的是最新值,則這是the right thing to do

基本上,註冊表中存儲了用於環境變量的模板,這就是您通過「Windows設置 - >環境變量」編輯的內容。當你這樣做時,Windows會向所有感興趣的各方廣播一條消息。任何此類方都可以從註冊表中重新創建它們的環境變量副本。

但是,我不知道有任何現成的函數可以調用來執行此重新創建,所以您可能必須編寫自己的函數。

+0

用'Environment.SetEnvironmentVariable'設置env變量時出現問題 – 2012-03-20 07:33:49

+0

我發現了一個變通方法:從代碼創建Process(cmd.exe)。在這個過程中執行「setx/M變量值」命令。這將修改全局env變量並不會導致問題。 – 2012-03-20 07:42:02

+0

@ user641426:全局*任何*都會隨着時間的推移而出現問題。 – 2012-10-08 20:35:42