<HTML><HEAD></HEAD>
<BODY dir=ltr>
<DIV dir=ltr>
<DIV style="FONT-FAMILY: 'Times New Roman'; COLOR: #00002b; FONT-SIZE: 12pt">
<DIV>Hi</DIV>
<DIV>&nbsp;</DIV>
<DIV>I want to open and execute a command line application from a Delphi 
interface. (FWTools ogr2ogr to be specific).</DIV>
<DIV>&nbsp;</DIV>
<DIV>When I cd the command prompt to FWTools bin and use the following argument 
it converts a dxf file to a PostgreSQL table perfectly.</DIV>
<DIV>&nbsp;</DIV>
<DIV>ogr2ogr -f "PostgreSQL" PG:"host=localhost user=postgres dbname=E5R 
password=Password" device.dxf -nln Device';</DIV>
<DIV>&nbsp;</DIV>
<DIV>However when I use Delphi code that I found on the internet, the ogr2ogr 
opens with an error .<A 
title=http://www.delphicorner.f9.co.uk/articles/wapi4.htm 
href="http://www.delphicorner.f9.co.uk/articles/wapi4.htm">http://www.delphicorner.f9.co.uk/articles/wapi4.htm</A></DIV>
<DIV>&nbsp;</DIV>
<DIV>Following is the code I am using.</DIV>
<DIV>&nbsp;</DIV>
<DIV>I have attempted various alternates such as spacing and white space within 
the path and argument string, with no success.</DIV>
<DIV>&nbsp;</DIV>
<DIV>I could very well be misinterpreting the instructions.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Any help would be appreciated.</DIV>
<DIV>&nbsp;</DIV>
<DIV>procedure TForm1.Button5Click(Sender: TObject);</DIV>
<DIV>&nbsp;</DIV>
<DIV>var</DIV>
<DIV>&nbsp; StartInfo : TStartupInfo;</DIV>
<DIV>&nbsp; ProcInfo : TProcessInformation;</DIV>
<DIV>&nbsp; CreateOK : Boolean;</DIV>
<DIV>&nbsp; Wait : Boolean;</DIV>
<DIV>&nbsp; ProgramName : String;</DIV>
<DIV>&nbsp;</DIV>
<DIV>begin</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ProgramName := 'C:\Program Files 
(x86)\FWTools2.4.7\bin\ogr2ogr -f "PostgreSQL" PG:"host=localhostuser=postgres 
dbname=E5R password=Password" device.dxf -nln Device';</DIV>
<DIV>&nbsp;&nbsp;&nbsp; { fill with known state }</DIV>
<DIV>&nbsp; FillChar(StartInfo,SizeOf(TStartupInfo),#0);</DIV>
<DIV>&nbsp; FillChar(ProcInfo,SizeOf(TProcessInformation),#0);</DIV>
<DIV>&nbsp; StartInfo.cb := SizeOf(TStartupInfo);</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp; CreateOK := CreateProcess(nil, PChar(ProgramName), nil, 
nil,False,</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
CREATE_NEW_PROCESS_GROUP+NORMAL_PRIORITY_CLASS,</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
nil, nil, StartInfo, ProcInfo);</DIV>
<DIV>&nbsp;&nbsp;&nbsp; { check to see if successful }</DIV>
<DIV>&nbsp; if CreateOK then</DIV>
<DIV>&nbsp;&nbsp;&nbsp; begin</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //may or may not be needed. 
Usually wait for child processes</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if Wait then</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
WaitForSingleObject(ProcInfo.hProcess, INFINITE);</DIV>
<DIV>&nbsp;&nbsp;&nbsp; end</DIV>
<DIV>&nbsp; else</DIV>
<DIV>&nbsp;&nbsp;&nbsp; begin</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowMessage('Unable to run 
'+ProgramName);</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp; end;</DIV>
<DIV>&nbsp; CloseHandle(ProcInfo.hProcess);</DIV>
<DIV>&nbsp; CloseHandle(ProcInfo.hThread);</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>end;</DIV></DIV></DIV></BODY></HTML>