Sei sicuro che

ProcessInfo.hProcess

sia valido quando chiami la WaitForSingleObject?

E inoltre, prova ad inserire una

int le = GetLastError();

dopo la Wait e visualizza il valore di le ...