2016-06-14 156 views
1

Windows中的每个进程都有自己的环境变量。但我不知道如何做一个进程都有环境变量,它从“全球环境变量”让他们Windows提供,我指的是环境变量:进程是否从父级继承其环境变量?还是从Windows获取它们?

enter image description here

或者它继承他们它的父进程(并且只有第一个父进程从Windows获取它的环境变量)?

+1

“smss.exe”进程(“Windows会话管理器”)具有非常有限的一组环境变量。我猜测这是内核启动的唯一进程,它负责读取存储的系统环境变量并将它们传递给其他早期运行的进程(如'csrss.exe'和'wininit。 exe')。用户变量可能被'userinit.exe'或者'winlogon.exe'读入。 –

回答

2

Environment Variables (Windows)所述,子进程继承其父进程的所有环境变量。此外,父进程可以使用CreateProcess来创建子进程并将新的一组环境变量传递给它。

除此之外,由命令处理器(CMD)启动的程序会继承CMD环境变量,这些变量也会在您附加到问题的屏幕截图中列出。

+0

因此** cmd.exe **和** explorer.exe **都从“全局环境变量”中获取它们的环境变量,然后当从** cmd.exe **或** explorer .exe **,进程将继承这些环境变量? – John

+1

@John:AFAIK,细节没有记录,可能会有变动。但是,当Explorer启动一个进程时,它可能会给它一个全局环境变量的副本。 'cmd.exe'似乎没有做任何特别的事情。 –

+1

一个更正:CreateProcess允许您为子进程指定一组不同的环境变量。这些不是*额外*变量,它们取代当前环境而不是添加到它。 –