Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > CreateProcess


Автор: Darksquall 4.11.2004, 12:37
Че то не получается дождаться завершения приложения,
выдает ошибку Access vioation at adress .... in module ntdll.dll

стоит XP, может поэтому?
вот код

Код

var
hProcess : array [0..1] of Cardinal;
struc1 : PSTARTUPINFO;
struc2 : PROCESS_INFORMATION;
...
CreateProcess ( PChar(VremKat+NameFile) ,nil,nil,nil,False,NORMAL_PRIORITY_CLASS,nil,nil,struc1^,struc2 );
hProcess[0] := struc2.hProcess;
if WaitForMultipleObjects ( 2, @hProcess, True, INFINITE ) = 1 then
   ShowMessage ('   OK' );

:qstn

Автор: maxim1000 4.11.2004, 12:43
насколько я понял требуется ожидать одного объекта
зачем тогда использовать WaitForMultipleObjects?
ошибка, скорее всего, возникает при использовании hProcess[1], который не заполняется

Автор: Darksquall 4.11.2004, 13:20
Нет, ошибка возникает на команде CreateProcess smile

Автор: p0s0l 4.11.2004, 14:39
Если на CreateProcess ошибка, то может неправильно struc1 заполнил ?

Автор: Darksquall 4.11.2004, 14:50
О, вот так заработало. smile
Код

procedure TForm1.ExecAndWait(FileNames:String);
var
Rslt: LongBool;
StartUpInfo: TStartUpInfo;
ProcessInfo: TProcessInformation;
App:array [0..254] of Char;
CmdLine: String;
begin
FillChar(StartupInfo, SizeOf(TStartupInfo), #0);
with StartupInfo do
  begin
cb:=SizeOf(TStartupInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow :=SW_SHOW;
  end;
FindExecutable(PChar(FileNames),nil,App);
CmdLine:=App+' "'+ Filenames + '"';
Rslt:=CreateProcess(nil, PChar(CmdLine), nil, nil, False,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo);

if Rslt then
       begin
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
ShowMessage('Файл закрыт!!!!');
       end else ShowMessage('Ошибка закрытия файла');
end;


хух, кошмар, теперь буду связывать 4 разных приложения через OLE и это все с SQL сервером smile , немного уже осталось

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)