C#System.Diagnostics.ProcessStartInfo环境变量不区分大小写

本文关键字:大小写 不区 环境变量 Diagnostics ProcessStartInfo C#System | 更新日期: 2023-09-27 18:19:31

ProcessStartInfo.EnvironmentVariables(类型StringDictionary)中的EnvironmentVariable在插入内容时总是设置为小写。例如:

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不区分大小写,只允许我使用所有大写字母?

C#System.Diagnostics.ProcessStartInfo环境变量不区分大小写

嗯,请注意所有同样有这个问题的人:令人惊讶的是,这是.Net 3.5中的一个错误,在4.0中得到了修复。

我不得不切换到.Net 4.0来解决这个问题。

Windows中的环境变量不区分大小写。这个变量的行为显然是基于这个事实。如果您在Windows环境中使用环境变量,这应该不会造成问题。你没有提到这是在什么平台上——它是在类似Unix的系统上运行的Mono应用程序吗?

我遇到了同样的问题,发现了这个问题。此时我不想将项目升级到.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", "");