Я пытаюсь запустить процесс из другого процесса.Механизм, в котором это достигается, не подлежит изменению.И модуль запуска, и исходный процесс находятся в C:\dir
.
Я запускаю свой модуль запуска из файла cmd
.Сам файл cmd
находится где-то еще, и для того, чтобы он нашел исполняемый файл средства запуска, я устанавливаю переменную PATH
:
set PATH=C:\dir;%PATH%;
launcher.exe
Модуль запуска запускает дочерний процесс со следующимкод:
STARTUPINFO startupInfo;
startupInfo.cb = sizeof (STARTUPINFO);
startupInfo.lpReserved = 0;
startupInfo.lpDesktop = NULL;
startupInfo.lpTitle = NULL;
startupInfo.dwX = 0;
startupInfo.dwY = 0;
startupInfo.dwXSize = 0;
startupInfo.dwYSize = 0;
startupInfo.dwXCountChars = 0;
startupInfo.dwYCountChars = 0;
startupInfo.dwFillAttribute = 0;
startupInfo.dwFlags = _showInForeground ? STARTF_USESHOWWINDOW : 0;
startupInfo.wShowWindow = _showInForeground ? 1 : 0;
startupInfo.cbReserved2 = 0;
startupInfo.lpReserved2 = 0;
PROCESS_INFORMATION processInfo;
BOOL retVal = CreateProcess("child.exe", "", NULL, NULL, FALSE,
_showInForeground ? (CREATE_NEW_CONSOLE | CREATE_DEFAULT_ERROR_MODE) : CREATE_DEFAULT_ERROR_MODE,
NULL, NULL, &startupInfo,&processInfo);
Возвращает 0
, а последняя ошибка - 2
, то есть File not found
.
Если это поможет, GetCurrentDirectory
возвращает каталог, в котором находится cmd
, а не C:\dir
.Я предполагаю, что CreateProcess
не может найти child.exe
, потому что PATH не доступен для него.
Есть идеи, как заставить это работать?
РЕДАКТИРОВАТЬ: Некоторые хорошие комментарии с ответами (так как комментарии иногда пропускаются):
Предложение: установите statupInfo.lpDirectory в "c: \ dir"
Ответ: не могу.Я начинаю с cmd, потому что каталог может измениться.