4

最初に、 perl (こちらも) とWindowsの終了コードに関する背景を少し調べてください。

-Windowsでperlスクリプトから別のプロセスを実行すると(メソッドについてはオープンです、qx/ open/ system/ exec/IPC::Runなど):

0-の範囲外の終了コードをキャプチャすることは可能255ですか?

0x8...0...Windows では、プロセスは完全な (署名された) 32 ビットの終了コードを返すことができ、COM エラー コードなどの何かが返されることはそれほど珍しいことではありません。

4

2 に答える 2

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();
于 2011-07-22T07:48:22.753 に答える
4

それは可能ですが、それは単純ではありません。

このWin32::APIモジュールは、WindowsAPIをPerlスクリプトに公開できます。これを使用して、GetExitCodeProcess関数のコード参照を作成し、デッドプログラムのプロセス識別子を使用して呼び出し、結果を解凍します。

于 2011-07-22T07:47:50.017 に答える