Fre*_*ddy 13 .net c# windows environment-variables
我想用C#程序扩展当前的PATH变量.我有几个问题:
使用GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine)替换占位符(即'%SystemRoot%\system32'由当前路径替换'C:\Windows\system32').更新PATH变量,我不想用路径替换占位符.
之后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)
您可以使用 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 参考