2012-01-04 36 views
1

ProcessStartInfo.EnvironmentVariables(類型StringDictionary)中的環境變量始終設置爲小寫,當我在其中插入某些內容時。例如:C#System.Diagnostics.ProcessStartInfo EnvironmentVariables不區分大小寫?

proc.StartInfo.EnvironmentVariables.Clear(); 
proc.StartInfo.EnvironmentVariables.Add("REDIRECT_STATUS", ""); 
// [snipped more variables being added here] 
proc.Start(); 

在這個過程中現在有一個redirect_status,而不是REDIRECT_STATUS因爲我想要的。這會導致問題。

我已經讀過其他地方,你可以通過製作一個批處理文件來解決這個問題,但是這不適用於我的情況,因爲這意味着被用作CGI(這個代碼可能被稱爲10次第二個。)

有沒有辦法讓EnvironmentVariables不區分大小寫,只讓我去全部大寫?

回答

2

嗯,給大家注意誰也有這個問題:可以看出,這是a bug in .Net 3.5,固定在4.0。

我不得不切換到.Net 4.0來解決這個問題。

1

Windows中的環境變量不區分大小寫。這個變量的行爲顯然是基於這個事實。如果您在Windows環境中使用環境變量,這應該不會造成麻煩。你沒有提到它是什麼平臺 - 它是一個運行在類Unix系統上的Mono應用程序嗎?

+1

這是一個Windows應用程序,但是,應用程序我打電話是PHP的CGI,如果你請求$ _SERVER ['SOMETHING'],它是區分大小寫的。 – Codecat 2012-01-04 19:35:14

+0

你是否可以控制PHP腳本?如果是這樣,如果在http://php.net/manual/en/function.getenv.php的評論是正確的,則用getenv('FOO')替換$ _SERVER ['FOO']應該可行。 – 2012-01-04 19:43:08

+0

我希望各種腳本都能正常工作,所以它需要上限中的環境變量。儘管如此,感謝getenv提示。不知道。 – Codecat 2012-01-04 19:48:12

1

我遇到了同樣的問題,發現了這個問題。此時不想將項目升級到.Net 4,我發現了以下解決方法。此變通方法依賴於內部實現StringDictionary類的,而這樣做往往被認爲是不好的做法,但它可以讓.Net的2所做的工作......

System.Reflection.FieldInfo contentsField = typeof(System.Collections.Specialized.StringDictionary).GetField("contents", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); 
System.Collections.Hashtable envtable = (System.Collections.Hashtable)contentsField.GetValue(proc.StartInfo.EnvironmentVariables); 
envtable.Add("REDIRECT_STATUS", ""); 
+0

如果你無法升級到.Net 4,很好的答案。我的答案是升級,但是無論如何你都能得到我的upvote。太好了! – Codecat 2014-10-12 15:11:51