How do I launch an external App. ??

How do I launch an external Application from D2.0 and wait for it to end (just like system() does in C/C++) ??
A little more information : the Application is a DOS based one, so it receives some parameters from command line and creates some output files.

I'm sure this is a very simple question, just want to know what **function or procedure** to call from inside my D2.0 app.

Besides, does anybody (expert I mean) know how many lines a Memo can store, depends on the TMemo implementation or on the amount of memory available on the system ??

thanx. Rigansen.
LVL 2
rigansenAsked:
Who is Participating?
 
Edo082297Connect With a Mentor Commented:
Hi Rigansen,


function CreateProcessSimple(sExecutableFilePath : string):string;
var
  pi: TProcessInformation;
  si: TStartupInfo;
begin
  FillMemory( @si, sizeof( si ), 0 );
  si.cb := sizeof( si );

  CreateProcess( Nil,    PChar( sExecutableFilePath ),   Nil, Nil, False,   NORMAL_PRIORITY_CLASS, Nil, Nil,  si, pi );

  // "after calling code" such as
  // the code to wait until the
  // process is done should go here  

  CloseHandle( pi.hProcess );
  CloseHandle( pi.hThread );
end;      
Now, all you have to do is call CreateProcessSimple(), let's say to run Windows' Notepad:
CreateProcessSimple( 'notepad' );      

It's that... simple.

Regards,

Edward

0
 
Edo082297Commented:
I believe that the TMemo component has a (theoretical) limit of 2 gigabytes! The operating system will limit the number of characters the user can enter if memory limit has been reached.
0
 
Edo082297Commented:
Hi again and sorry, I'm not paying attention to the question you asked. To get the Delphi to wait for the process to end, use

WaitforSingleObject(ProcessInfo.hProcess,INFINITE);

You have to load the process handle (hProcess) into the ProcessInfo structure when you use CreateProcess.



0
 
rigansenAuthor Commented:
but...

what about using WinExec() ?

what about executing a .BAT file ?


can you help me on that ??
0
 
Edo082297Commented:
Hi Rigansen

   Sorry for not getting back sooner, I only happened to notice you asked for more info when reviewing another question!
   WinExec is implemented as a call to CreateProcess, and yes, you can use it. However, it remains only for backwards compatibility, and this means that you should only use CreateProcess. Besides, it allows you more control over the process.
   About the .BAT file, you'll have to post :) My DOS is limited (ironically) and since M$ took the help file out, I really can't tell you - the only BAT files I write are to do update files across networks and the likes (simple copies, etc...).

Regards,
Edo
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.