我在使用C#设置环境变量时遇到了问题。
在某些情况下,我需要修改一些环境变量。例如,我需要修改NDSRC变量。
我使用:
Environment.SetEnvironmentVariable("MY_VARIABLE", "value", EnvironmentVariableTarget.Machine);这可以很好地工作。
接下来,我运行一些使用该变量的脚本。现在出现了一个问题,因为脚本看不到这个变量。
示例:使用以下命令设置Path变量(在末尾添加一个目录
string path = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine) + ";c:\\";
Environment.SetEnvironmentVariable("Path", path, EnvironmentVariableTarget.Machine);打开windows命令行(开始->运行->cmd.exe)。
在命令行中键入cmd
系统找不到cmd.exe:'cmd‘未被识别为内部或外部命令、可操作程序或批处理文件。
如果您检查Windows设置->环境变量,则Path被正确设置为新值。如果检入打开的命令提示符,则也会对其进行设置。
发布于 2012-03-20 00:55:39
不幸的是,在刷新环境变量之前,您需要重新启动进程。请参阅此MSDN post。
发布于 2012-03-20 01:23:41
根据设计,这些变量在进程启动时继承,并在此之后保持不变。
但是,您没有理由不能定期读取相关的注册表项,并从中手动更新进程的环境变量。实际上,如果您追求的是最新的值,那么这就是the right thing to do。
基本上,注册表存储了环境变量的模板,这是您通过"Windows设置->环境变量“编辑的模板。当您这样做时,Windows会向所有相关方广播一条消息。然后,任何这样的参与方都可以从注册表重新创建它们的环境变量副本。
但是,我不知道有什么现成的函数可以调用来执行这种重新创建,所以您可能必须编写自己的函数。
https://stackoverflow.com/questions/9774358
复制相似问题