在用于创建新子进程的窗口中,我正在使用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变量或更新现有变量,则可能需要先检查它是否已定义。
以上就是c/c++开发分享如何让子进程使用与parrent相同的环境变量加上它自己在windows中?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/559864.html