是否可以处理退出代码>用perl 255?

时间:2011-07-22 07:15:22

标签: windows perl exit-code

首先,找一些关于退出代码in perlalso here)和on Windows的背景信息。

现在 - 当我从perl脚本执行另一个进程时(我对该方法持开放态度qx / open / system / { {1}} / exec等)Windows上的

是否可以捕获IPC::Run - 0范围之外的退出代码?

在Windows上,一个进程可以返回一个完整的(已签名的)32位退出代码,并且返回255,即某些COM错误代码或某些内容并不常见。

2 个答案:

答案 0 :(得分:6)

是的,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();

答案 1 :(得分:4)

这是可能的,但并不简单。

Win32::API模块可以将Windows API公开给Perl脚本。使用它为the GetExitCodeProcess function创建代码引用,使用dead程序的进程标识符调用它,并解压缩结果。