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

标签 windows perl exit-code

首先,找到一些关于退出代码的背景 in perl ( also here ) 和 on Windows .

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

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

在 Windows 上,一个进程可以返回一个完整的(带符号的)32 位退出代码,返回 0x8...0... 的情况并不少见,也就是说,一些 COM 错误代码或类似的东西。

最佳答案

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

关于windows - 是否可以使用 perl 处理退出代码 > 255?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6786812/

相关文章:

c++ - 如何使用 C/C++ 以编程方式检查 Windows 中的系统文件夹?

windows - 如何允许用户选择要复制的目录?

python - 如何使用 Python 和 ctypes 在 Windows 上读取或写入 as h r i 文件属性?

Xcode 错误 : Command/usr/bin/codesign failed with exit code 1

Apache jsvc 无法停止守护进程

windows - 共享 ssh-agent - Windows 服务、msys2 shell

java - "\n"是垂直空格吗,即 "\v"应该匹配它吗?

perl - 如何在 perl 脚本中包含 BEGIN 部​​分

perl - 在 perl 中添加哈希时遇到问题

qt - 在Qt中退出应用程序