Code:
bool LaunchApplication (WCHAR *wszPath, WCHAR *wszExe, WCHAR *wszCommandLine)
{
	SHELLEXECUTEINFO ExeInfo;
	ZeroMemory (&ExeInfo, sizeof (ExeInfo));
	ExeInfo.fMask = SEE_MASK_FLAG_NO_UI | SEE_MASK_NOCLOSEPROCESS;
	ExeInfo.cbSize = sizeof (SHELLEXECUTEINFO);
	ExeInfo.lpDirectory = wszPath;
	ExeInfo.lpParameters = wszCommandLine;
	ExeInfo.lpFile = wszExe;
	ExeInfo.nShow = SW_SHOWNORMAL;

	if (!ShellExecuteEx (&ExeInfo))
	{
		// problem launching
		return false;
	}

	// wait for the app to start
	WaitForInputIdle( ExeInfo.hProcess, 30000);
	CloseHandle( ExeInfo.hProcess );

	return true;
}
This assumes you are compiling using UNICODE. Otherwise, change all WCHARs to char