В принципе неверно. Тебе нужна функция CreateProcess, которая вернет тебе хэндл процесса и пока этот процесс работает тебе надо ждать.
Вот кусок кода из проекта, запускающего консольное приложение и ждущего, пока оно отработает:
Код:
// call pcpos
FName := FWorkPlaceOptions.PCPOSFilePath + 'out.pos';
DeleteFile(FName);
si.lpReserved := nil;
si.lpDesktop := nil;
si.lpTitle := nil;
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_SHOWNORMAL;
si.lpReserved2 := nil;
si.cbReserved2 := 0;
si.cb := SizeOf(si);
if CreateProcess(PChar(FWorkPlaceOptions.PCPOSPath),
nil,
nil,
nil,
BOOL(FALSE),
CREATE_DEFAULT_ERROR_MODE or NORMAL_PRIORITY_CLASS or CREATE_NEW_CONSOLE,
nil,
PChar(ExtractfilePath(FWorkPlaceOptions.PCPOSPath)),
si,
pi) = BOOL(FALSE) then
raise Exception.Create(PCPOSRunFault);
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
Application.ProcessMessages;