C#设置环境变量

我在使用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设置 – >环境变量,则路径已正确设置为新值。 如果您检入打开的命令提示符,它也会被设置。

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

根据设计,变量在进程启动时inheritance,并在此之后保持不变。

但是,没有理由不能只是定期读取相关的注册表项并从中手动更新进程的环境变量。 事实上,如果你追求的是最新的价值观,这是正确的做法 。

基本上,注册表存储环境变量的模板 ,这是您通过“Windows设置 – >环境变量”编辑的内容。 当您这样做时,Windows会向所有相关方广播一条消息。 然后,任何此类方都可以从注册表重新创建环境变量的副本。

我不知道你可以调用任何现成的函数来执行这种重新创建,所以你可能需要编写自己的函数。