dcsimg
Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.


Tip of the Day
Language: Pascal
Expertise: Beginner
Aug 26, 1998

WEBINAR:

On-Demand

Building the Right Environment to Support AI, Machine Learning and Deep Learning


Running an EXE file via a Delphi App

Question:
I want to be able to run an EXE file on a button click in one of my Delphi applications. Is it possible to do this? Where do I declare the file I want to run, and how do I put it into basic code?

Answer:
If you're running Win16, then the call to make is WinExec. For Win32 environments, you can use ShellExecute. But you really should use CreateProcess. Here's some sample code that I use to execute external programs:

{Supply a fully qualified path name in ProgramName
 and any arguments on the command line. As the 
 help file states: "If lpApplicationName is NULL, 
 the first white space-delimited token of the 
 command line specifies the module name..." In 
 English, the characters before the first space 
 encountered (or if no space is encountered as in 
 a single program call) is interpreted as the
 EXE to execute. The rest of the string is the 
 argument line.} 
procedure ExecNewProcess(ProgramName : String);
var
  StartInfo  : TStartupInfo;
  ProcInfo   : TProcessInformation;
  CreateOK   : Boolean;
begin

  { fill with known state }
  FillChar(StartInfo,SizeOf(TStartupInfo),#0);
  FillChar(ProcInfo,SizeOf(TProcessInformation),
           #0);
  StartInfo.cb := SizeOf(TStartupInfo);

  CreateOK := CreateProcess(nil, 
              PChar(ProgramName), nil, nil,
              False,
              CREATE_NEW_PROCESS_GROUP + 
              NORMAL_PRIORITY_CLASS, 
              nil, nil, StartInfo, ProcInfo);

  { check to see if successful }
  if CreateOK then
    //may or may not be needed. Usually wait for 
    //child processes. You can comment this line
    //out.
    WaitForSingleObject(ProcInfo.hProcess, 
                        INFINITE);
end;
The function above only works for Win32 programs, it will not work for Win16--you'll get a compiler error.
DevX Pro
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date