string path = System.Environment.GetEnvironmentVariable("Path"); Console.WriteLine(path); if (!path.Contains("C:\ccstg")) { if (!path.EndsWith(";")) path = path + ';'; var v=@"C:\ccstg;"; path = path + v; Environment.SetEnvironmentVariable("Path",path); Console.WriteLine(path); Console.WriteLine("Path Set"); Console.ReadKey(); }
我试图设置path环境variables使用C#,我能够得到“path”,但设置它没有被设置。 它也不显示任何错误。 我曾尝试以pipe理员身份运行它,没有帮助。
有人在这里错过了什么吗?
首先,你需要对字符串文字更小心,因为“\ c”不是有效的字符串文字转义序列,所以你发布的代码将不会被编译。 修理:
string newPathComponent = @"C:\ccstg"; if (!path.Contains(newPathComponent)) { if (!path.EndsWith(";")) path = path + ';'; path = path + newPathComponent; Environment.SetEnvironmentVariable("Path", path);
现在,这段代码工作并设置了进程持续时间的路径。 如果要永久设置路径,则需要使用Environment.SetEnvironmentVariable Method (String, String, EnvironmentVariableTarget)
,例如:
var target = EnvironmentVariableTarget.User; // Or EnvironmentVariableTarget.Machine Environment.SetEnvironmentVariable("Path", path, target);
更多在这里 。
但是,如果这样做,则必须小心将路径组件添加到与该EnvironmentVariableTarget
关联的路径。 这是因为%PATH%
环境变量实际上是由多个来源组合而成的 。 如果您不小心,可以将组合的路径复制到EnvironmentVariableTarget.Machine
或EnvironmentVariableTarget.User
源代码中 – 您不希望这样做。
从而:
static void AddToEnvironmentPath(string pathComponent, EnvironmentVariableTarget target) { string targetPath = System.Environment.GetEnvironmentVariable("Path", target) ?? string.Empty; if (!string.IsNullOrEmpty(targetPath) && !targetPath.EndsWith(";")) targetPath = targetPath + ';'; targetPath = targetPath + pathComponent; Environment.SetEnvironmentVariable("Path", targetPath, target); }
最后,如果你在Visual Studio宿主进程中运行以进行调试,我发现如果你使用Environment.SetEnvironmentVariable("Path",path, EnvironmentVariableTarget.User)
,永久环境的改变将不会被提取,直到你退出并重新启动Visual Studio。 我认为,与视觉工作室托管过程有点奇怪。 为了处理这种奇怪的情况,你可能想要做到这两个:
AddToEnvironmentPath(@"C:\ccstg", EnvironmentVariableTarget.User) AddToEnvironmentPath(@"C:\ccstg", EnvironmentVariableTarget.Process)
SetEnvironmentVariable设置当前进程的变量。 你的过程有自己的环境。 在程序中设置环境变量时,只会影响程序的环境。
如果你想影响用户的环境,也就是说,做出改变,以便在程序之外看到它,那么你必须调用这个过载 。 例如:
Environment.SetEnvironmentVariable("Path", path, EnvironmentVariableTarget.User);
有关更多详细信息,请参阅EnvironmentVariableTarget枚举。