В Windows CreateProcess фактически не возвращает код ошибки.Вместо этого вы используете GetLastError , чтобы найти дополнительные сведения в случае сбоя CreateProcess, а затем используйте FormatMessage , чтобы превратить код ошибки из GetLastError в правильное описание.(Коды ошибок из GetLastError также можно декодировать, используя этот список )
Глядя на источник для proc_open (), PHP фактически выполняет GetLastError () для вас в случаеошибка, и код ошибки, который она регистрирует, является возвращением из GetLastError (), а не из CreateProcess (который возвращает BOOL, вряд ли будет 3 :))
Обратите внимание, что proc_open использует это для вывода сообщения:
php_error_docref(NULL TSRMLS_CC, E_WARNING, "CreateProcess failed, error code - %u", dw);
... так что "-", который вы получили до 3, это просто дефис, а не знак минус.Поэтому вы получаете код ошибки 3, который согласно этому списку означает «Система не может найти указанный путь».