>lcdir = SYS(5)+SYS(2003) >>Also this code works slightly better (modified recently):
>PROCEDURE RunAndWait (lcApp, lcCmdLine) >#DEFINE START_INFO_SIZE 68 >#DEFINE INFINITE 0xFFFFFFFF > > DECLARE INTEGER CreateProcess IN kernel32; > STRING lpAppName, STRING lpCmdLine, INTEGER lpProcAttr,; > INTEGER lpThrAttr, INTEGER bInhHandles, INTEGER dwCrFlags,; > INTEGER lpEnvir, STRING lpCurDir, ; > STRING @lpStInfo, STRING @lpProcInfo > > LOCAL cStartupInfo, cProcInfo, hProcess, hThread > cStartupInfo = PADR(Chr(START_INFO_SIZE), START_INFO_SIZE, Chr(0)) > cProcInfo = Repli(Chr(0), 16) > > IF CreateProcess(lcApp, lcCmdLine, 0,0,0,0,0,; > SYS(5)+SYS(2003), @cStartupInfo, @cProcInfo) <> 0 > > * process and thread handles returned in ProcInfo structure > hProcess = buf2dword(SUBSTR(cProcInfo, 1,4)) > hThread = buf2dword(SUBSTR(cProcInfo, 5,4)) > > * waiting until the termination > = WaitForSingleObject(hProcess, INFINITE) > > = CloseHandle(hThread) > = CloseHandle(hProcess) > ELSE > ? "Error code:", GetLastError() > ENDIF >