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:
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
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, 2023 • Updated: 04/21/19
Comment or report problem with topic