프로세스를 실행시키고.. 해당프로세스의 작업이 완료되었는지 기다린뒤  다음 코드를 수행하는 루틴

CString strDir;
char szDrive[_MAX_DRIVE], szDir[_MAX_DIR];
_splitpath(g_strFilePath.GetBuffer(g_strFilePath.GetLength()),szDrive,szDir,NULL,NULL);
strDir.Format("%s%s",szDrive,szDir);

SHELLEXECUTEINFO sei = {0};
sei.cbSize = sizeof (SHELLEXECUTEINFO);
sei.fMask  = SEE_MASK_NOCLOSEPROCESS;
sei.lpVerb = "open";
sei.lpFile = g_strFilePath;
sei.lpDirectory = strDir.GetBuffer(strDir.Length());
sei.lpParameter = "test.txt -t.."
sei.nShow  = SW_SHOWNORMAL;

if (ShellExecuteEx (&sei))
{
   WaitForSingleObject (sei.hProcess, INFINITE);
}

// 익스플로러 띄우기..
ShellExecute(NULL, "open", "iexplore.exe", "
http://dynaforce.tistory..com", NULL, SW_SHOWNORMAL);

////////////////////////////////////////////////////////////////////////////////////////////

WaitForSingleObject앞에
WaitForInputIdle(sei.hProcess, INFINITE);//해당프로그램이 초기화완료될때까지 대기 
프로그램의 초기화 시간이 긴 경우 사용 

ps. ShellExecuteEx안에서 CreateProcess를 내부적으로 호출