CreateProcessEx
about 1 minute to read

Runs an external process using the CreateProcessEx API including the ability to redirect output to a file and Wait for completion.

CreateProcessEx has a number of advantages over using the RUN command including a much longer command line limit and the ability to understand long filenames correctly.

CreateProcessEx provides the ability to pipe output into an output file - a feature that is not available for the simpler CreateProcess function.

CreateProcessEx(lcExe, lcCommandLine, 
                lcStartDirectory, lnShowWindow, 
                llWaitForCompletion,
                lcStdOutputFilename)

Return Value

.t. or .f.

Parameters

lcExe
Full path to the EXE file. You need a full path even if the file lives in the SYSTEM directory.

lcCommandLine
Optional - Command line arguments for the application.

lcStartDirectory
Optional - The directory that the application runs out of. Don't pass to use the current directory.

lnShowWindow
Optional - The display mode/sizing of how the window is displayed. Uses a numeric value that comes from standard Windows API values:

foxpro
SW_HIDE 0 SW_SHOWNORMAL 1 SW_NORMAL 1 SW_SHOWMINIMIZED 2 SW_SHOWMAXIMIZED 3 SW_MAXIMIZE 3 SW_SHOWNOACTIVATE 4 SW_SHOW 5 SW_MINIMIZE 6 SW_SHOWMINNOACTIVE 7 SW_SHOWNA 8 SW_RESTORE 9 SW_SHOWDEFAULT 10 SW_FORCEMINIMIZE 11 SW_MAX 11

llWaitForCompletion
If .T. waits for the process to complete before control returns back to FoxPro. This is a common requirement for execution so you can capture output and determine success of an operation. Note: internally handled via WaitHandles to get around CreateProcess' asynchronous nature.

lcStdOutputFileName
Allows you to specify a file that captures the Standard Output results. Great for capturing output from Console applications directly to a file.

Remarks

This function is a standalone function and not a member of the wwAPI class.

This function requires wwIpstuff.dll.

Example

foxpro
FUNCTION SetACL(lcPath,lcUser,lcAccess,llInherit,llReplace) LOCAL lcCommand, lcFile, lcParms *** Strip off any trailing backslashes IF RIGHT(lcPath,1)="\" AND LEN(lcPath) > 1 lcPath = SUBSTR(lcPath,1,LEN(lcPath)-1) ENDIF lcParms = ShortPath( lcPath) IF llInherit lcParms = lcParms + " /T " ENDIF IF !llReplace lcParms = lcParms + " /E " ENDIF lcParms = lcParms + " /P " + lcUser + ":" + lcAccess *** Use CreateProcessEx if wwIPStuff is available *** so we don't get flashing DOS Windows LOCAL oAPI oAPI = CREATEOBJECT("wwAPI") CreateProcessEx( oAPI.GetSystemDir() + "cacls.exe",ALLTRIM(lcParms),0,.t.,; FULLPATH("cacls.txt"))

See also:

Class wwAPI

© West Wind Technologies, 1996-2024 • Updated: 04/21/19
Comment or report problem with topic