2012-03-19 208 views
8

我有使用C#设置环境变量的问题。C#设置环境变量

我需要在某些情况下修改一些环境变量。例如,我需要修改NDSRC变量。

我用:

Environment.SetEnvironmentVariable("MY_VARIABLE", "value", EnvironmentVariableTarget.Machine); 

这工作得很好。

接下来我运行一些使用变量的脚本。现在有一个问题,因为脚本没有看到变量。

示例: 使用

string path = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine) + ";c:\\"; 
Environment.SetEnvironmentVariable("Path", path, EnvironmentVariableTarget.Machine); 

打开窗口的命令行设置路径变量(在末尾添加一个目录)(开始 - >运行> cmd.exe的)。

在命令行键入cmd

系统无法找到cmd.exe的:“加利福尼亚”不被识别为一个内部或外部的命令,可操作的程序或批处理文件。

如果您检查Windows设置 - >环境变量,路径被正确设置为新值。如果您检入打开的命令提示符,它也会被设置。

回答

4

不幸的是,您需要在刷新环境变量之前重新启动进程。请参阅MSDN post

+1

你好。这不是问题。我使用 Environment.SetEnvironmentVariable(“MY_VARIABLE”,“value”,EnvironmentVariableTarget.Process); 为我的过程设置环境变量,它工作。问题在于,除了我的过程外,即使我看到更改的变量,其他任何过程似乎都看不到它。在这个例子中,我只是将一些东西添加到Path变量。之后,系统根本看不到路径变量。 – 2012-03-19 17:36:41

1

通过设计,变量在过程开始时被继承,并在此之后保持固定。

但是没有理由不为了定期阅读相关注册表项并手动更新流程的环境变量。实际上,如果您使用的是最新值,则这是the right thing to do

基本上,注册表中存储了用于环境变量的模板,这就是您通过“Windows设置 - >环境变量”编辑的内容。当你这样做时,Windows会向所有感兴趣的各方广播一条消息。任何此类方都可以从注册表中重新创建它们的环境变量副本。

但是,我不知道有任何现成的函数可以调用来执行此重新创建,所以您可能必须编写自己的函数。

+0

用'Environment.SetEnvironmentVariable'设置env变量时出现问题 – 2012-03-20 07:33:49

+0

我发现了一个变通方法:从代码创建Process(cmd.exe)。在这个过程中执行“setx/M变量值”命令。这将修改全局env变量并不会导致问题。 – 2012-03-20 07:42:02

+0

@ user641426:全局*任何*都会随着时间的推移而出现问题。 – 2012-10-08 20:35:42