既存プログラムAをランチャーBから起動しました。
既存プログラムAにはエラーコードとして4~-4を定義しているのですが、
プログラム終了後、ランチャーBでは意図していない値(-1073741819)
を受け取ってしまいます。
この値はどのようなときに受け取るものなのでしょうか?
捕捉
・既存プログラムAはExitProcessを用いて値を返している。
・既存プログラムAは単体動作する(ログなし)。
・ランチャーBでは、既存プログラムが存在するディレクトリをカレントにしてから呼び出している。
状況がよく分からないので、想像を多く含みます。
ランチャーがCreateProcessなどで、プログラムAを起動し、その後、ランチャーがGetExitCodeProcessでステータスコードを取得しているということでいいでしょうか?
MSDNによると、GetExitCodeProcessは
•ExitProcess または TerminateProcess 関数で指定した終了コード。 •プロセスの main または WinMain 関数の戻り値。 •プロセスを終了させた、まだ処理されていない例外の例外コード。
を返します。
参考:http://msdn.microsoft.com/ja-jp/library/cc429117.aspx
ここから、プログラムAのExitProcessで-4から4までの値を指定して終了しているはずなのに、-1073741819が取得される。ということでしょうか?
さて、GetExitCodeProcessの説明をよく見ると、この関数は、「プロセスを終了させた、まだ処理されていない例外の例外コード。」を返すこともあります。つまり、想定したExitProcessが実行される前に何らかの例外が発生してプログラムが終了した場合です。
そこで、-1073741819を16進数に直してみると、「C0000005」です。
これはよく見るエラーコード(Access Violation)です。
この辺りから類推すると、プログラムAは単体では動作するものの、ランチャーから起動した場合は、パラメタなどの影響により、Access Violationを引き起こし、プログラムが異常終了しているのではないかと思います。
何かの参考になれば。
状況がよく分からないので、想像を多く含みます。
ランチャーがCreateProcessなどで、プログラムAを起動し、その後、ランチャーがGetExitCodeProcessでステータスコードを取得しているということでいいでしょうか?
MSDNによると、GetExitCodeProcessは
•ExitProcess または TerminateProcess 関数で指定した終了コード。 •プロセスの main または WinMain 関数の戻り値。 •プロセスを終了させた、まだ処理されていない例外の例外コード。
を返します。
参考:http://msdn.microsoft.com/ja-jp/library/cc429117.aspx
ここから、プログラムAのExitProcessで-4から4までの値を指定して終了しているはずなのに、-1073741819が取得される。ということでしょうか?
さて、GetExitCodeProcessの説明をよく見ると、この関数は、「プロセスを終了させた、まだ処理されていない例外の例外コード。」を返すこともあります。つまり、想定したExitProcessが実行される前に何らかの例外が発生してプログラムが終了した場合です。
そこで、-1073741819を16進数に直してみると、「C0000005」です。
これはよく見るエラーコード(Access Violation)です。
この辺りから類推すると、プログラムAは単体では動作するものの、ランチャーから起動した場合は、パラメタなどの影響により、Access Violationを引き起こし、プログラムが異常終了しているのではないかと思います。
何かの参考になれば。
回答ありがとうございます。
とても参考になりました。
http://msdn.microsoft.com/ja-jp/library/cc429099.aspx
http://www.gizcollabo.jp/vbtomo/log/archive/vbqanda_2372_3.html
ランチャーBから既存プログラムAを呼び出すのにどのような方法を使ってるのでしょうか?
その方法によって違います。
回答ありがとうございます。
とても参考になりました。