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

Mar*_* Ba 4 windows perl exit-code

首先,在perl(也在这里)和Windows上找到关于退出代码的一些背景知识.

现在 - 当我在Windows上从perl脚本(我打开方法,qx/ open/ system/ exec/ IPC::Run等)执行另一个进程时:

是否有可能捕获范围之外的退出代码0- 255

在Windows上,进程可以返回一个完整的(已签名的)32位退出代码,并且返回0x8...0...某些东西并不常见,也就是说,某些COM错误代码或某些东西.

cjm*_*cjm 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();
Run Code Online (Sandbox Code Playgroud)