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();
}
我正在尝试使用c#设置路径环境变量,我能够得到" Path"但设置它时没有设置。它也没有显示任何错误。我也尝试过以管理员身份运行它,没有帮助。
有人在这里找不到什么?
答案 0 :(得分:5)
首先,您需要对字符串文字稍微小心,您发布的代码将无法编译,因为“\ 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);
更多here。
但是,如果这样做,则必须小心地将路径组件仅添加到与EnvironmentVariableTarget
关联的路径中。那是因为%PATH%
环境变量实际上是combined from several sources。如果您不小心,可以将组合路径复制到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 Hosting Process内部进行调试,我发现如果您使用Environment.SetEnvironmentVariable("Path",path, EnvironmentVariableTarget.User)
,则在退出并重新启动visual studio之前,不会更改永久环境。我认为,与视觉工作室托管过程有些奇怪。要处理这种奇怪的情况,你可能想要同时做到这两点:
AddToEnvironmentPath(@"C:\ccstg", EnvironmentVariableTarget.User)
AddToEnvironmentPath(@"C:\ccstg", EnvironmentVariableTarget.Process)
答案 1 :(得分:1)
SetEnvironmentVariable设置当前进程的变量 。您的流程有自己的环境。在程序中设置环境变量时,它只会影响程序的环境。
如果您想影响用户的环境,即进行更改以便可以在程序外看到,那么您必须致电this overload。例如:
Environment.SetEnvironmentVariable("Path", path, EnvironmentVariableTarget.User);
有关详细信息,请参阅EnvironmentVariableTarget枚举。