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