我在使用C#设置环境变量时遇到问题。
我需要在某些情况下修改一些环境变量。例如,我需要修改NDSRC变量。
我用:
Environment.SetEnvironmentVariable("MY_VARIABLE", "value", EnvironmentVariableTarget.Machine);
这很好用。
接下来我运行一些脚本whitch使用变量。现在有一个问题,因为脚本没有看到变量。
实施例: 使用
设置Path变量(在末尾添加目录)string path = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine) + ";c:\\";
Environment.SetEnvironmentVariable("Path", path, EnvironmentVariableTarget.Machine);
打开Windows命令行(开始 - >运行 - > cmd.exe)。
在命令行中键入cmd
系统找不到cmd.exe:'cmd'无法识别为内部或外部命令,可运行程序或批处理文件。
如果您检查Windows设置 - >环境变量,Path正确设置为新值。如果您签入打开的命令提示符,它也会被设置。
答案 0 :(得分:7)
不幸的是,您需要在刷新环境变量之前重新启动进程。请参阅此MSDN post。
答案 1 :(得分:2)
通过设计,变量在进程启动时继承,并在此之后保持不变。
但是,您没有理由不能定期阅读相关的注册表项,并从中手动更新您的进程环境变量。事实上,如果您追求的是最新值,则为the right thing to do。
基本上,注册表为环境变量存储模板,这是您通过“Windows设置 - >环境变量”编辑的内容。当您这样做时,Windows会向所有相关方广播一条消息。然后,任何此类方都可以从注册表中重新创建环境变量的副本。
我不知道你可以调用任何现成的函数来执行这种重新创建,所以你可能需要编写自己的函数。