Можно ли обрабатывать коды выхода> 255 с помощью Perl? - PullRequest
4 голосов
/ 22 июля 2011

Во-первых, найдите небольшой фон о коде выхода в perl ( также здесь ) и в Windows .

Теперь - когда явыполнить другой процесс из сценария Perl (я открыт в отношении метода, qx / open / system / exec / IPC::Run и т. д.) вклWindows :

Возможно ли захватить коды выхода за пределами диапазона 0 - 255?

В Windows процесс может вернутьполный (подписанный) 32-битный код завершения, и нередко бывает, что что-то возвращает 0x8...0..., то есть какой-либо код ошибки COM или какой-то другой.

Ответы [ 2 ]

6 голосов
/ 22 июля 2011

Да, Win32 :: Process может вернуть полный 32-битный код выхода со знаком. Используйте метод GetExitCode. Но это немного сложно, потому что возвращаемое значение - , а не - код выхода (это возвращаемое значение функции Windows GetExitCodeProcess , которая указывает на успех или неудачу функции). Код завершения сохраняется в переменной, которую вы передаете методу.

use Win32::Process;
use Win32;

sub ErrorReport{
    print Win32::FormatMessage( Win32::GetLastError() );
}

my $ProcessObj;
Win32::Process::Create($ProcessObj,
                       "C:\\winnt\\system32\\notepad.exe",
                       "notepad temp.txt",
                       0,
                       NORMAL_PRIORITY_CLASS,
                       ".") or die ErrorReport();

$ProcessObj->Wait(INFINITE);
my $exitCode;
$ProcessObj->GetExitCode($exitCode) or die ErrorReport();
4 голосов
/ 22 июля 2011

Это возможно, но это не просто.

Модуль Win32::API может предоставлять API-интерфейс Windows для сценариев Perl. Используйте его, чтобы создать ссылку на код для функции GetExitCodeProcess , вызвать ее с идентификатором процесса мертвой программы и распаковать результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...