Comment faire en sorte que le processus enfant utilise les mêmes variables d’environnement que Parrent et qu’il soit propre à Windows?

Dans les fenêtres de création d’un nouveau processus enfant, CreateProcess fonction CreateProcess :

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

Ici, nous pouvons voir que CreateProcess peut obtenir le paramètre lpEnvironment pour spécifier les variables d’environnement du nouveau processus. Si la valeur est NULL, l’enfant aura le même environnement que parrent. Maintenant, je veux que l’enfant ait le même environnement que les vars d’environnement Parrent plus spécifiés dans lpEnvironment (c’est-à-dire l’environnement fusionné du processus parent et de ceux spécifiés). Comment suggéreriez-vous de faire cela? Devrais-je prendre tous les envs du parent, les fusionner avec de nouveaux et les transmettre à CreateProcess ?

Utilisez getenv pour obtenir crt env ajoutez votre propre et définissez

Je crois que tu es sur le bon chemin. Récupère le bloc env existant, ajoute tes nouveaux éléments, passe-les à la fonction CreateProcess, puis détruis le nouveau bloc env.

Pour obtenir le bloc actuel, utilisez GetEnvironmentSsortingngs . Ajout de nouvelles variables que vous devrez probablement faire par de simples manipulations de chaîne. Le bloc d’environnement est simplement une séquence consécutive de chaînes terminées par null, avec un double null à la fin, comme décrit ici . Vous voudrez peut-être d’abord vérifier si vous ajoutez une nouvelle variable env ou si vous mettez à jour une variable existante, au cas où elle serait déjà définie.