如何让子进程使用与parrent相同的环境变量加上它自己在windows中?

在用于创建新子进程的窗口中,我正在使用CreateProcess函数:

 BOOL WINAPI CreateProcess( __in_opt LPCTSTR lpApplicationName, __inout_opt LPTSTR lpCommandLine, __in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes, __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes, __in BOOL bInheritHandles, __in DWORD dwCreationFlags, __in_opt LPVOID lpEnvironment, __in_opt LPCTSTR lpCurrentDirectory, __in LPSTARTUPINFO lpStartupInfo, __out LPPROCESS_INFORMATION lpProcessInformation ); 

在这里我们可以看到CreateProcess可以获取lpEnvironment参数来指定新进程的环境变量,如果它是NULL,则子进程将具有与parrent相同的环境。 现在我想让孩子拥有与parrent相同的环境以及lpEnvironment中指定的环境变量(即父进程和指定进程的合并环境)。 你会怎么建议这样做? 我应该采用父级的所有envs,将它们与新的env合并并将它们全部传递给CreateProcess吗?

使用getenv获取crt env添加自己的并设置

我认为你走在正确的轨道上。 获取现有的env块,附加新的东西,将其传递给CreateProcess函数,然后销毁新的env块。

要获取当前块,请使用GetEnvironmentStrings 。 添加新变量,您可能需要通过简单的字符串操作来完成。 环境块只是以空值终止的字符串的连续序列,最后是双空,如此处所述。 如果您要附加新的env变量或更新现有变量,则可能需要先检查它是否已定义。