如何从C++更改Windows shell(cmd.exe)环境变量?

Ste*_*owe 1 c++ windows cmd environment-variables

我想编写一个程序,在调用它的shell(cmd.exe)实例中设置一个环境变量.我的想法是,我可以在此变量中存储一些状态,然后在后续调用中再次使用它.

我知道有像SetEnvironmentVariable这样的命令,但我的理解是那些只改变当前进程的变量而不会修改调用shell的变量.

具体来说,我希望能够创建一个可以在两个目录之间跳转的命令.Pushd/Popd可以转到目录并返回,但是没有办法将第二次返回到最初推送的目录.

Jef*_*tes 6

MSDN声明如下:

调用SetEnvironmentVariable对系统环境变量没有影响.要以编程方式添加或修改系统环境变量,请将它们添加到 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment注册表项,然后将设置为字符串"Environment" 的WM_SETTINGCHANGE消息广播lParam.这允许应用程序(如shell)获取更新.请注意,此键中列出的环境变量的值限制为1024个字符.

考虑到有两个级别的环境 - 系统和流程 - 更改shell中的那些将构成改变另一个流程的环境.我不相信这是可能的.