Rich, Thought I'd chime in with code that I've used for the very same process. It worked on D7... HTH.
unit Process; interface uses Classes, Windows, SysUtils; function ExecuteWait(Path, Command, Params: String; ShowWindow: Word; Output: TStringList): DWord; function GetTempFile: String; implementation function ExecuteWait(Path, Command, Params: String; ShowWindow: Word; Output: TStringList): DWord; // Build a temporary filename ----------- var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; saAttr: TSecurityAttributes; hOut, hInp: THandle; outFile, inpFile: String; begin if Path = '' then begin Output.Add('Path not specified: ' + Path); exit; end;// if Path saAttr.nLength := sizeof(TSecurityAttributes); saAttr.bInheritHandle := True; saAttr.lpSecurityDescriptor := nil; hOut := STD_OUTPUT_HANDLE; hInp := STD_INPUT_HANDLE; if Output <> nil then begin outFile := GetTempFile; hOut := CreateFile(PChar(outFile), GENERIC_READ or GENERIC_WRITE, 0, @saAttr, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY, 0); end; // if Output <> nil ZeroMemory(@ProcessInfo, SizeOf(TProcessInformation)); ZeroMemory(@StartupInfo, SizeOf(TStartupInfo)); with StartupInfo do begin cb := SizeOf(TStartupInfo); hStdOutput := hOut; hStdError := hOut; hStdInput := hInp; wShowWindow := ShowWindow; dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; end; // with if CreateProcess(nil, PChar('"'+ Path + Command + '" ' + Params), @saAttr, @saAttr, True, 0, nil, PChar(Path), StartupInfo, ProcessInfo) then begin WaitForSingleObject(ProcessInfo.hProcess, INFINITE); repeat GetExitCodeProcess(ProcessInfo.hProcess, Result); //Application.ProcessMessages; until (Result <> STILL_ACTIVE); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); if Output <> nil then begin CloseHandle(hOut); Output.LoadFromFile(outFile); end; // if Output <> nil DeleteFile(inpFile); DeleteFile(outFile); end // if CreateProcess(... else Output.Add('Create Process failed. Code: ' + IntToStr(GetLastError())); end; // function GetTempFile: String; var DirBuf, FileBuf: Array [0..255] of char; begin GetTempPath(Length(DirBuf), DirBuf); GetTempFileName(DirBuf, 'tmp', 0, PChar(@FileBuf)); Result := FileBuf; end;//GetTempFile end. _______________________________________________ Delphi mailing list -> Delphi@elists.org http://www.elists.org/mailman/listinfo/delphi