Я пытаюсь запустить процесс из другого процесса. Механизм, в котором это достигается, не подлежит изменению. Как пусковая установка, так и исходный процесс находятся в C:\dir
.CreateProcess из процесса, запущенного из файла `cmd`
Я запускаю свою пусковую установку из файла 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 недоступен.
Любые идеи, как заставить это работать?
EDIT: Некоторые хорошие комментарии с ответами (а комментарии иногда забывают):
Предложение: установить statupInfo.lpDirectory в "C: \ реж"
Ответ: не может. Я начинаю с cmd, потому что каталог может измениться.
set statupInfo.lpDirectory to "c: \\ dir" – Lucian
@ Люциан не может. Я начинаю с 'cmd', потому что каталог может измениться. –
Зачем смешивать с переменной PATH? Если файл cmd знает местоположение исполняемого файла, который должен быть запущен, почему бы не передать путь к исполняемому файлу в качестве параметра вашей пусковой установки в командной строке? 'launcher.exe c: \ dir \ child.exe' – WaffleSouffle