public static IDictionary GetEnvironmentVariables (EnvironmentVariableTarget target)
{
IDictionary variables = (IDictionary)new Hashtable ();
switch (target) {
case EnvironmentVariableTarget.Process:
variables = GetEnvironmentVariables ();
break;
case EnvironmentVariableTarget.Machine:
new EnvironmentPermission (PermissionState.Unrestricted).Demand ();
if (IsRunningOnWindows) {
using (Microsoft.Win32.RegistryKey env = Microsoft.Win32.Registry.LocalMachine.OpenSubKey (@"SYSTEM\CurrentControlSet\Control\Session Manager\Environment")) {
string[] value_names = env.GetValueNames ();
foreach (string value_name in value_names)
variables.Add (value_name, env.GetValue (value_name));
}
}
break;
case EnvironmentVariableTarget.User:
new EnvironmentPermission (PermissionState.Unrestricted).Demand ();
if (IsRunningOnWindows) {
using (Microsoft.Win32.RegistryKey env = Microsoft.Win32.Registry.CurrentUser.OpenSubKey ("Environment")) {
string[] value_names = env.GetValueNames ();
foreach (string value_name in value_names)
variables.Add (value_name, env.GetValue (value_name));
}
}
break;
default:
throw new ArgumentException ("target");
}
return variables;
}