2016-06-14 59 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允許您爲子進程指定一組不同的環境變量。這些不是*額外*變量,它們取代當前環境而不是添加到它。 –

相關問題