October 03, 2015require 'win32ole' で終了コードが0xc0000005 (対処療法)[Computer]
前回の記事でE-MailRelayを使ったメールアドレスの送信直前チェック方法を書きましたが、一部の環境でエラーがでることがわかりました。チェックするRubyスクリプトの終了コードがアドレスチェックにあたって重要なのですが、終了コードが常に-1073741819 (0xc0000005)になってしまうのです。調べたところこの値はAccess Violationで、権限に関する問題だと思われます。 require 'win32ole'をするだけの短いスクリプトを実行後、$? (cygwin) あるいは %ERRORLEVEL% (Windows cmd.exe)を見てみると、その値になっていたことから、OLE絡みであることは確かでした。WIN32OLE#ole_freeを実行してみましたが、改善しませんでした。 そこで対処療法をしました。win32oleを使う部分を別プロセスに閉じ込めることにしました。スクリプトは現在下記のようになっています(前のリビジョンへのリンク)。 forkで別プロセスを起動し、プロセス間通信はPipeを利用して、オブジェクトはMarshalでやり取りをしています。根本的解決にはなりませんが、取り急ぎ終了コードが正しいものになり、アドレスをチェックする目的が達成できるようになりました。 ※その後、バッチファイルに埋め込み(shebang)してみました。 コメント
コメントする
|
スポンサード リンク
|