Я бы начал с получения последней системной ошибки, а затем отформатировал ее и выгрузил, что-то вроде:
std::string getSystemErrorMsg()
{
LPVOID lpMsgBuf;
::FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL );
std::string err = reinterpret_cast<const char *>( lpMsgBuf );
::LocalFree( lpMsgBuf );
return err;
}
Я бы вызвал такую функцию сразу после сбоя CreateProcess, а затем передал бы строку с ошибкой в OutputDebugString () и использовал бы что-то вроде DebugView для мониторинга вывода. Иногда ОС может дать вам понять, почему она не будет делать то, что вы ожидаете, не всегда, но я бы, по крайней мере, начал там.