Как заставить процесс COM-узла избегать наследования переменных среды от родительского процесса - PullRequest
0 голосов
/ 30 декабря 2011

Моя ОС - Win7 x64.У меня есть два EXE-файла с именем ComHost.exe и ClientApp.exe.

ComHost.exe - это отдельный exe-файл, а также COM-хост для внепроцессного COM.

ClientApp.exe создает экземпляр COM, вызывая CoCreateInstance (...).При создании экземпляра COM запускается процесс ComHost.exe.

В переменных среды Windows есть переменная "AppStatus = status1".

В реализации ClientApp.exeкод такой:

int ret = putenv("AppStatus=status2"); // Change the environment variable.
// do something
CoCreateInstance(...); // Start ComHost.exe

В реализации ComHost.exe я получаю значение viriable с кодом

char * pStatus = getenv("AppStatus");

Случай 1 : если запуститьComHost.exe, дважды щелкнув по нему, значение pStatus «status1».

Случай 2 : если запустить ComHost.exe в ClientApp.exe, значение pStatus равно «status2».Он наследует переменные окружения родительского процесса ClientApp.exe.

Мой вопрос:

Я хочу, чтобы ComHost.exe всегда считывал значение переменной, определяемое ОС, а незначение, унаследованное от процесса parent .Это означает, что в случае 2 я хочу получить значение «status1».Возможно ли это?

1 Ответ

2 голосов
/ 30 декабря 2011

Если дважды щелкнуть процесс «ComHost.exe», вы, вероятно, делаете это из Explorer.EXE.Это означает, что вы не получите «значение переменной, определяемое ОС».Вы просто наследуете его от Explorer.EXE (который, допустим, запускается особым образом при входе в систему.)

За кулисами мы всегда используем CreateProcess или его вариант.Его поведение по умолчанию - создание нового процесса, копирование переменных среды вызывающего процесса.Поскольку вы не отвечаете за создание этого нового процесса (в случае 2, это COM), вы не можете изменить это поведение.

Таким образом, в обоих случаях getenv даст вамнаследуемое значение, а в случае 2 вы не можете получить значение «которое вы бы унаследовали от Explorer.EXE».

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