Где я могу найти детали кодов ошибок CreateProcess? - PullRequest
5 голосов
/ 14 февраля 2011

я бегу в php следующее:

$res = proc_open($cmd, $descriptorspec, $pipes, "C:\\xampp\htdocs\\",null,array('bypass_shell'=>true));

Проблема в том, что выдает следующую ошибку:

Warning: proc_open(): CreateProcess failed, error code - 3

Где я могу узнать, что означает ошибка?

PS: это на Windows Server 2007. SP2. Пользователь является администратором, полный доступ. PHP версии 5.3.1

1 Ответ

9 голосов
/ 14 февраля 2011

В 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, который согласно этому списку означает «Система не может найти указанный путь».

...