Puedes probar con la rutina siguiente o simplemente usar
!MiProgramaExterno
** Examples
******************************************************
** Launching a program by specifying the exe
******************************************************
** pcFileName = "c:\Program Files\Winzip\Winzip32.Exe"
** pcAction = "open"
** pcParams = ""
**
******************************************************
** Launching a program by specifying a file
******************************************************
** pcFileName = "f:\Data\Archive.Zip"
** pcAction = "open"
** pcParams = ""
**
**
****************************************************
Lparameters pcFileName,pcAction,pcParams,pcDefDir,pnShowWindow
* Filename
If Vartype(pcFileName) <> "C"
? "Need a file to open!"
Return .F.
Endif
* Action
If Vartype(pcAction) <> "C"
pcAction = "open"
Endif
* Parameters
If Vartype(pcParams) <> "C"
pcParams = ""
ENDIF
* Default Directory
If Vartype(pcDefDir) <> "C"
pcDefDir = ADDBS(SYS(5)+CURDIR())
ENDIF
* Show Window (min / Max etc)
If Vartype(pnShowWindow) <> "N"
pnShowWindow = 1
Endif
#Define SE_ERR_FNF 2
#Define SE_ERR_PNF 3
#Define SE_ERR_ACCESSDENIED 5
#Define SE_ERR_OOM 8
#Define SE_ERR_DLLNOTFOUND 32
#Define SE_ERR_SHARE 26
#Define SE_ERR_ASSOCINCOMPLETE 27
#Define SE_ERR_DDETIMEOUT 28
#Define SE_ERR_DDEFAIL 29
#Define SE_ERR_DDEBUSY 30
#Define SE_ERR_NOASSOC 31
#Define ERROR_BAD_FORMAT 11
Declare Integer ShellExecute In shell32.Dll ;
INTEGER hndWin, ;
STRING cAction, ;
STRING cFileName, ;
STRING cParams, ;
STRING cDir, ;
INTEGER nShowWin
cFileName = pcFileName
cAction = pcAction
cParams = pcParams
cDir = pcDefDir
nShowWin = pnShowWindow
Local lnRetVal
lnRetVal = 0
lnRetVal = ShellExecute(0,cAction,cFileName,cParams,cDir,nShowWin)
If lnRetVal <= 32
Local msg
msg = ""
*There was an error
Do Case
Case lnRetVal = SE_ERR_FNF
msg = "File not found"
Case lnRetVal = SE_ERR_PNF
msg = "Path not found"
Case lnRetVal = SE_ERR_ACCESSDENIED
msg = "Access denied"
Case lnRetVal = SE_ERR_OOM
msg = "Out of memory"
Case lnRetVal = SE_ERR_DLLNOTFOUND
msg = "DLL not found"
Case lnRetVal = SE_ERR_SHARE
msg = "A sharing violation occurred"
Case lnRetVal = SE_ERR_ASSOCINCOMPLETE
msg = "Incomplete or invalid file association"
Case lnRetVal = SE_ERR_DDETIMEOUT
msg = "DDE Time out"
Case lnRetVal = SE_ERR_DDEFAIL
msg = "DDE transaction failed"
Case lnRetVal = SE_ERR_DDEBUSY
msg = "DDE busy"
Case lnRetVal = SE_ERR_NOASSOC
msg = "No association for file extension"
Case lnRetVal = ERROR_BAD_FORMAT
msg = "Invalid EXE file or error in EXE image"
Otherwise
msg = "Unknown error"
Endcase
? msg
Return .F.
Else
Return .T.
Endif
*************************************************************************
Suerte