Как заставить дочерний процесс с теми же переменными окружения, что и parrent, плюс его собственный в Windows? - PullRequest
3 голосов
/ 08 апреля 2011

В окнах для создания нового дочернего процесса я использую функцию 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 (то есть объединенное окружение родительского процесса и указанных).Как бы вы предложили это сделать?Должен ли я взять все окружения родителей, объединить их с новыми и передать их на CreateProcess?

Ответы [ 2 ]

3 голосов
/ 08 апреля 2011

Я думаю, вы на правильном пути. Получить существующий блок env, добавить новый материал, передать его в функцию CreateProcess, а затем уничтожить новый блок env.

Чтобы получить текущий блок, используйте GetEnvironmentStrings . Для добавления новых переменных вам, вероятно, придется делать простые строковые манипуляции. Блок окружения представляет собой просто концептуальную последовательность строк с нулевым символом в конце, с двойным нулем в конце, как описано здесь . Возможно, вы захотите сначала проверить, добавляете ли вы новую переменную env или обновляете существующую, если она уже определена.

0 голосов
/ 08 апреля 2011

используйте getenv , чтобы получить crt env, добавьте свой собственный и установите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...