无论出于什么原因,在特定机器上,我的 cmd 进程不会从启动它的父进程继承其环境变量。相反,它会恢复为“默认”环境设置,就像它是通过资源管理器启动的一样。
演示此操作的一个简单方法是打开命令提示符,然后运行set Path=C:\Windows\System32\
,接着cmd
从同一提示符启动另一个进程。然后可以通过运行 查看该变量set Path
。
它应该是“C:\Windows\System32”(从启动过程继承)但在我的计算机上它已恢复为我的环境默认值。
这可能是什么原因造成的?它似乎破坏了有关环境变量如何工作的所有规则,并且只影响这一台机器。
答案1
问题是由于命令处理器的自动运行设置。命令行的这个小“功能”允许您配置一个脚本,在每次 CMD 进程启动时运行。
就我而言,某些东西(可能是 NVMW 的安装)注册了一个脚本,该脚本分配了一个全新的Path
值,完全忽略了任何现有值。
删除该HKCU\Software\Microsoft\Command Processor\Autorun
值可使命令行恢复其正常行为。
答案2
使用/d
选项cmd.exe
从注册表中跳过自动运行命令。无需删除自动运行键。
C:\> cmd /? | findstr uto
/D Disable execution of AutoRun commands from registry (see below)
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun
更多来自cmd /?
:
If /D was NOT specified on the command line, then when CMD.EXE starts, it
looks for the following REG_SZ/REG_EXPAND_SZ registry variables, and if
either or both are present, they are executed first.
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
and/or
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun