mkk*_*wat 1 c# windows winapi environment-variables
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();
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用c#设置路径环境变量,我能够获得"路径",但设置它时没有设置.它也没有显示任何错误.我也尝试过以管理员身份运行它,没有任何帮助.
有人在这里找不到什么?
首先,您需要对字符串文字稍微小心,您发布的代码将无法编译,因为"\ c"不是有效的字符串文字转义序列.修理:
string newPathComponent = @"C:\ccstg";
if (!path.Contains(newPathComponent))
{
if (!path.EndsWith(";"))
path = path + ';';
path = path + newPathComponent;
Environment.SetEnvironmentVariable("Path", path);
Run Code Online (Sandbox Code Playgroud)
现在,此代码可以工作并设置进程持续时间的路径.如果要永久设置路径,则需要使用Environment.SetEnvironmentVariable Method (String, String, EnvironmentVariableTarget),例如:
var target = EnvironmentVariableTarget.User; // Or EnvironmentVariableTarget.Machine
Environment.SetEnvironmentVariable("Path", path, target);
Run Code Online (Sandbox Code Playgroud)
更多这里.
但是,如果这样做,则必须小心地将路径组件仅添加到与之关联的路径中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);
}
Run Code Online (Sandbox Code Playgroud)
最后,如果您在Visual Studio托管过程中运行以进行调试,我观察到如果您使用Environment.SetEnvironmentVariable("Path",path, EnvironmentVariableTarget.User),则在退出并重新启动visual studio之前,将不会获取对永久环境的更改.我认为,与视觉工作室托管过程有些奇怪.要处理这种奇怪的情况,你可能想要同时做到这两点:
AddToEnvironmentPath(@"C:\ccstg", EnvironmentVariableTarget.User)
AddToEnvironmentPath(@"C:\ccstg", EnvironmentVariableTarget.Process)
Run Code Online (Sandbox Code Playgroud)