PATH变量的GetEnvironmentVariable()和SetEnvironmentVariable()

Fre*_*ddy 13 .net c# windows environment-variables

我想用C#程序扩展当前的PATH变量.我有几个问题:

  1. 使用GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine)替换占位符(即'%SystemRoot%\system32'由当前路径替换'C:\Windows\system32').更新PATH变量,我不想用路径替换占位符.

  2. 之后SetEnvironmentVariable无法再从命令框中打开任何程序(即命令框中的calc.exe不起作用).我使用以下代码:

String oldPath = Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine);
Environment.SetEnvironmentVariable("PATH", oldPath + ";%MYDIR%", EnvironmentVariableTarget.Machine);
Run Code Online (Sandbox Code Playgroud)

PATH使用Windows 编辑和更改变量后,一切都可以正常工作.(我需要更改内容,否则不会覆盖)

小智 5

您可以使用注册表来读取和更新:

string keyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment";
//get non-expanded PATH environment variable            
string oldPath = (string)Registry.LocalMachine.CreateSubKey(keyName).GetValue("Path", "", RegistryValueOptions.DoNotExpandEnvironmentNames);

//set the path as an an expandable string
Registry.LocalMachine.CreateSubKey(keyName).SetValue("Path", oldPath + ";%MYDIR%",    RegistryValueKind.ExpandString);
Run Code Online (Sandbox Code Playgroud)


Str*_*llo 1

您可以使用 WMI 检索原始值(但不确定是否更新它们):

ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_Environment WHERE Name = 'PATH'");
foreach (ManagementBaseObject managementBaseObject in searcher.Get())
     Console.WriteLine(managementBaseObject["VariableValue"]);
Run Code Online (Sandbox Code Playgroud)

检查MSDN 上的WMI 参考