#DEFINE cnINFINITE 0xFFFFFFFF #DEFINE cnHalfASecond 500 && milliseconds #DEFINE cnTimedOut 258 && 0x0102 * We need some API calls, declare here * GetCurrentProcess returns the pseudohandle of the current process (ie VFP instance) DECLARE INTEGER GetCurrentProcess IN WIN32API AS GetCurrProc * WaitForIdleInput waits until the application is instantiated and at it's event loop DECLARE INTEGER WaitForInputIdle IN WIN32API AS WaitInpIdle ; INTEGER nProcessHandle, ; INTEGER nWaitForDuration * WaitForSingleObject waits until the handle in parm 1 is signalled or the timeout period expires DECLARE INTEGER WaitForSingleObject IN WIN32API AS WaitOnAppExit ; INTEGER hProcessHandle, ; INTEGER dwTimeOut * Save the Process handle if any and the result of LaunchApp * Fire the app and save the process handle LOCAL uResult uResult = 0 WITH This .icErrorMessage = '' IF .LaunchApp() uResult = 1 * It's been launched; wait until we're idling along =WaitInpIdle(GetCurrProc(),cnINFINITE) * As long as the other process exists, wait for it * * Modification here - remove the DO WHILE lopp that waits for * the launched app to terminate * DO WHILE WaitOnAppExit(.inProcessHandle, cnHalfASecond) = cnTimedOut * Give us an out in case the other app hangs - let <Esc> terminate waits * IF INKEY() = 27 * Still running but we aren't waiting - return a -1 as a warning * .icErrorMessage = 'Process started but user did not wait on termination' * uResult = 0 * EXIT * ENDIF * ENDDO ELSE * Return 0 to indicate failure uResult = 0 ENDIF ENDWITH RETURN (uResult = 1)>The problem is that on the latest 450+Mhz computers, the run command does not happen. The code in the IF - ENDIF does not execute.So the DDE servers do not start up.So what I usually get is TERMISRV.EXE runs but RELAYSRV.EXE does not execute.