Saxonika
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Привет всем! Ребята помоги мне пожалуйста. У меня такой головной боль. Не знаю как побороть... Мне нужно запустить программу так, чтобы она не знала о существовании родительского процесса. Как запустить программу от имени операционной системы? и долждаться её окончания. Как я это делаю и зачем всё это: 1) есть программа, назовём её "не-моя" (буржуйские корейцы написали) 2) эта программа "не-моя" работает в комплексе с другими программами "не-моими", но может быть запущена и самостоятельно без остальных программ (хотя вроде как это и не предусмотрено, но весь комплекс разбит на части по программам и эти программы просто работают по цепочке передавая другу другу информацию). 3) если программу "не-мою" запустить из-под explorer или того же far, то программа "не-моя" всё правильно делает, производит все необходимые операции, генерирует и сохраняет результат, а по окночанию чудно и великолепно выходит. 4) если программу "не-мою" запускаю из-под своей программы, то программа "не-моя" опять всё чудно делает, всё на ура, но ... в конце она виснет !!!! Я сделал такое предположение, что программа "не-моя" просто определяет родительский процесс и если таковой найден, то она считает, что это одна из программ комплекса и пытается с ней в конце своей работы как-то взаимодействовать, ну типа сообщить ей о результате своей работы (и потому вовсе она не виснет, а просто ждёт что родительский процесс чего-то ей сообщит). Но о том как происходит это взаимодействие я не знаю и инфы никакой нет. Запускаю я всё это достаточно стандартно... Код: var si: TStartupInfo; pi: TProcessInformation; begin FillChar(si, SizeOf(si),0); si.cb := SizeOf(si); FillChar(pi, SizeOf(pi),0); if CreateProcess(PChar('ProgramToRun.exe'), nil, nil, nil, false, CREATE_NEW_CONSOLE or // creation flags NORMAL_PRIORITY_CLASS, nil, nil, si, pi) then begin WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); end else MessageDlg(SysErrorMessage(GetLastError), mtError, [mbOK], 0); end; | Ребята помогите! Как запустить программу так, чтобы она не знала о родительском процессе и дождаться окончания её выполнения? Спасибо. |