2011-12-08 42 views
1

我想通過執行它從我的Windows應用程序從控制檯應用程序設置環境變量。我調用控制檯應用程序並將環境變量的值作爲參數發送給它,然後將該線程設置爲等待10秒以繼續執行下一個執行。 在接下來的步驟中,我嘗試加載一個新的.exe,它讀取設置爲環境變量的值。 該exe不會讀取新值並繼續引用前面設置的值。寫入環境變量,並從相同的過程中讀取

一旦應用程序的解決方案關閉並打開,它將讀取新值,即重新加載vshost。

+0

HTTP ://msdn.microsoft.com/en-us/library/z46c489x.aspx – Maheep

回答

1

打賭你只爲當前進程設置變量。你應該試試這個overload of the Environment.SetEnvironmentVariable method

Environment.SetEnvironmentVariable("YourVar", "YourValue", 
    EnvironmentVariableTarget.User); 

[編輯]重讀你的問題,你的標題是「同樣的過程」,而在這個問題:「新的EXE」之稱。就Env varialble而言,跨越一個新進程意味着一個新的env變量的進程範圍。他們不會僅僅因爲它是相同的可執行文件而與進程範圍共享env變量。也許你應該解釋你在更高層面上想要做的事情。

[EDIT2]不知道要弄清失敗的原因...但是你可以使用ProcessStartInfo.EnvironmentVariables Property

基本上產卵過程時指定環境變量,它可以被(未測試):

var psi = new ProcessStartInfo { 
    FileName="yourExe" 
}; 
psi.EnvironmentVariables.Add("YourVariable","YourValue"); 
var process = Process.Start(psi); 
+0

嗨史蒂夫重新構造我的問題下面我有一個Windows應用程序,我通過代碼設置環境變量。然後我通過相同的winodws應用程序調用第三方應用程序,它需要讀取環境變量的值。雖然它能夠讀取值,但它總是會獲得以前的值,而不是來自Windows應用程序的最新更新值。 如果我與vshost一起殺死應用程序,然後讀取環境變量,我可以獲得新設置的值。 我該如何解決此問題? – user1087209

+0

在我的Windows應用程序中,我調用exe文件 System.Diagnostics.Process.Start(「D:\\ New Folder \\ Env \\ SettingEnv \\ bin \\ Debug \\ SettingEnv.exe」,strFilesPath); 在這個exe文件中我有Environment.SetEnvironmentVariable(「YourVar」,「YourValue」,EnvironmentVariableTarget.Machine); System.Threading.Thread.Sleep(10000) 接下來我繼續加載第三部分的exe,它應該從環境變量集中讀取值 – user1087209

+0

我的第三方exe讀取機器級別設置的環境變量 – user1087209