Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未在windows中使用c#设置环境。我哪里做错了?_C#_Windows_Winapi_Environment Variables - Fatal编程技术网

未在windows中使用c#设置环境。我哪里做错了?

未在windows中使用c#设置环境。我哪里做错了?,c#,windows,winapi,environment-variables,C#,Windows,Winapi,Environment Variables,我试图使用c#设置path环境变量,我能够获得“path”,但在设置时它没有被设置。它也没有显示任何错误。我也尝试过以管理员的身份运行它,没有帮助 有人知道我这里缺少什么吗?为当前进程设置变量。您的流程有自己的环境。在程序中设置环境变量时,它只影响程序的环境 如果您想影响用户的环境,也就是说,进行更改以便可以在程序外部看到它,那么您必须调用。例如: string path = System.Environment.GetEnvironmentVariable("Path"); Console.W

我试图使用c#设置path环境变量,我能够获得“path”,但在设置时它没有被设置。它也没有显示任何错误。我也尝试过以管理员的身份运行它,没有帮助

有人知道我这里缺少什么吗?

为当前进程设置变量。您的流程有自己的环境。在程序中设置环境变量时,它只影响程序的环境

如果您想影响用户的环境,也就是说,进行更改以便可以在程序外部看到它,那么您必须调用。例如:

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”不是有效的字符串文字转义序列,所以您发布的代码将无法编译。要修复:

Environment.SetEnvironmentVariable("Path", path, EnvironmentVariableTarget.User);
现在,这段代码可以工作并设置进程持续时间的路径。如果要永久设置路径,则需要使用,例如:

        string newPathComponent = @"C:\ccstg";
        if (!path.Contains(newPathComponent))
        {
            if (!path.EndsWith(";"))
                path = path + ';';
            path = path + newPathComponent;
            Environment.SetEnvironmentVariable("Path", path);
更多

但是,如果这样做,则必须小心将路径组件仅添加到与该
EnvironmentVariableTarget
关联的路径中。这是因为
%PATH%
环境变量实际上是。如果不小心,可以将组合路径复制到
环境variabletarget.Machine
环境variabletarget.User
源中,这是您不想做的

因此:

最后,如果您在内部运行以进行调试,我观察到,如果您使用
Environment.SetEnvironmentVariable(“Path”,Path,EnvironmentVariableTarget.User)
,则在退出并重新启动visual studio之前,不会拾取对永久环境的更改。我认为VisualStudio托管过程有些奇怪。要处理这种奇怪的情况,您可能需要同时执行以下两项操作:

    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);
    }

试着把`\``翻一倍。不。实际上这不应该是个问题。我想你可以在这个变量中输入任何字符。这不起作用,但路径应该被编辑。@winney我每次都会进去。我正在打印“路径集”。伙计,到目前为止,这是我在这个问题上看到的最好和最完整的答案。可笑的是,一个“使用这种方法”的人竟然获得了150张选票,而这个答案却留在这里等死。
    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);
    }
AddToEnvironmentPath(@"C:\ccstg", EnvironmentVariableTarget.User)
AddToEnvironmentPath(@"C:\ccstg", EnvironmentVariableTarget.Process)