C# プロセスを開始すると、システム環境変数が他のプロセスによって変更されます。したがって、このアプリケーションは、更新された環境を必要とする子プロセスも開始するため、環境をプロセスにリロードしたいと考えています。これは、環境変数を取得および設定しようとしている方法です。
Dictionary<String,String> uservars= new Dictionary<String,String>();
Dictionary<String, String> sysvars = new Dictionary<String, String>();
foreach (System.Collections.DictionaryEntry de in System.Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine))
sysvars.Add(de.Key.ToString().ToUpper(),de.Value.ToString());
foreach (System.Collections.DictionaryEntry de in System.Environment.GetEnvironmentVariables(EnvironmentVariableTarget.User))
{
uservars.Add(de.Key.ToString().ToUpper(), de.Value.ToString());
}
Dictionary<string, string> newdict = new Dictionary<string, string>();
foreach (KeyValuePair<String, String> kvp in uservars)
{
if (sysvars.ContainsKey(kvp.Key))
{
newdict.Add(kvp.Key, kvp.Value + ";" + sysvars[kvp.Key]);
sysvars.Remove(kvp.Key);
}
else
newdict.Add(kvp.Key, kvp.Value);
}
foreach (KeyValuePair<string, string> kvp in sysvars)
newdict.Add(kvp.Key, kvp.Value);
foreach (KeyValuePair<string, string> kvp in newdict)
{
System.Environment.SetEnvironmentVariable(kvp.Key, kvp.Value);
}
問題は、取得した環境変数System.Environment.GetEnvironmentVariables(EnvironmentVariableTarget.User)
が、アプリケーションの起動時の変数と同じであることです。しかし、それは更新変数ではありません。
これらの変数をシステムから直接取得する方法はありますか?