- PR -

System.Environment.ExitCodeの使い方

投稿者投稿内容
NM
ベテラン
会議室デビュー日: 2003/08/28
投稿数: 93
投稿日時: 2003-12-02 17:14
また、質問ですが宜しくお願いします。

VB.NETでWindowsアプリケーションを作っています。

Microsoft.VisualBasic.Commandでコマンドを取得し、例えばコマンドがOFFと言う文字列ならバッチ動作として画面やメッセージボックスを表示させない。ONならば画面有りのメッセージ有りの処理が動く様にしています。

上記の処理自身は正しく動作しているのですがバッチ動作の時(.BAT)、System.Environment.ExitCodeを使えばERRORLEVELで判定できると思い、処理結果が異常の場合、System.Environment.ExitCodeに1を設定し、正常なら0を設定する様にしていますが、異常が発生してもERRORLEVELは1以外の時の動作と成ってしまいます。

デバックモードで調べると、最後までSystem.Environment.ExitCodeの値は1と成っていました。ぺルプを見るとSystem.Environment.ExitCodeは「指定されている終了コードを基になるオペレーティング システムに渡します。」と成っているのですが使い方が悪いのでしょうか!

また、System.Environment.ExitCodeでは、ERRORLEVELに値を渡せない場合、何か良い方法は無いでしょうか?

以上

因みにバッチは次の様な機術をしています。

C:\EXE\WinApp100.EXE OFF
IF NOT ERRORLEVEL = 1 GOTO SKIP
echo >>処理が中断されました。ログファイルおよびエラーログファイルを確認して下さい。
PAUSE
echo **** 処理は異常終了しました。 ****
GOTO END
:SKIP
echo **** 処理は正常終了しました。 ****
:END

架空兎
ベテラン
会議室デビュー日: 2003/08/18
投稿数: 78
お住まい・勤務地: さいたま氏
投稿日時: 2003-12-02 18:17
恐らく Windows アプリケーションがバックグラウンドプロセスで実行されているため、
その終了コードを取ることができないのだと思われます。

OS は Windows 2000 もしくは XP ですか?
もし、そうだとしたら

コード:

C:\EXE\WinApp100.EXE OFF




コード:

cmd /C C:\EXE\WinApp100.EXE OFF


とするとどうでしょうか?

#もしくは、コンソールアプリケーションにするか。
NM
ベテラン
会議室デビュー日: 2003/08/28
投稿数: 93
投稿日時: 2003-12-02 18:57
早々有難う御座います。
OSはWindows2000を使っています。
因みに.NETは2002でFrameWorkは1.03です。
アクセサリのコマンドプロンプトから.BATを起動して試しているのですが、教えていただきましたようにCMDに変えてやって見たのですが残念ながら同じ結果でエラーが起きているのにエラーの表示の方に飛びませんでした。
以上
架空兎
ベテラン
会議室デビュー日: 2003/08/18
投稿数: 78
お住まい・勤務地: さいたま氏
投稿日時: 2003-12-02 22:25
う〜ん、私も試しに作って実行したらきちんと取得できたのですが。。。

一度、コマンドプロンプトから CMD コマンドを使ってその Windows アプリケーションを実行した後、

コード:

echo %ERRORLEVEL%



を実行してみてください。
それで表示された値が予想通りの結果にならない場合はその Windows アプリケーションが
原因なのですが、そうなると今はちょっと分かりません(申し訳ないのですが)。。。
# System.Environment.ExitCode の値を設定するタイミングとか・・・?^^;
#もしくは、Windows アプリケーションが終了する直前で

コード:

System.Environment.Exit(1)



#というふうにしてみるとか・・・。

#ちなみに私の環境は
# OS : Windows 2000
# IDE : VS.NET 2003
# SDK : .NET Framework 1.1


[ メッセージ編集済み 編集者: 架空兎 編集日時 2003-12-02 22:33 ]
NM
ベテラン
会議室デビュー日: 2003/08/28
投稿数: 93
投稿日時: 2003-12-02 23:54
%ERRORLEVEL%で確認した所、0が返っていました。

従って、プログラム上の問題のようです。

ただ、スタート時点で行き成りEXITCODEに2をセットして終わらしても0が返ります。終らせ方はENDステートメントですがENDだと0が返ると言うことは?

因みに架空兎さんは正しく動いたとの事ですがコードセット後はどの様に終らせてますか?
NM
ベテラン
会議室デビュー日: 2003/08/28
投稿数: 93
投稿日時: 2003-12-03 00:19
度々済みません。

System.Environment.Exit(1)

を使って見た所、1を取得出来ました。

Endステートメントで終らせていたことが原因でしょうか!

以上
架空兎
ベテラン
会議室デビュー日: 2003/08/18
投稿数: 78
お住まい・勤務地: さいたま氏
投稿日時: 2003-12-03 01:03
引用:

NMさんの書き込み (2003-12-02 23:54) より:

ただ、スタート時点で行き成りEXITCODEに2をセットして終わらしても0が返ります。終らせ方はENDステートメントですがENDだと0が返ると言うことは?


どうやら End ステートメントが原因みたいですね。。。
#確かに 0 が返りました。

引用:

因みに架空兎さんは正しく動いたとの事ですがコードセット後はどの様に終らせてますか?


Main プロシージャを抜けるか、もしくはスタートアップフォームを閉じただけです。
# End ステートメントは使いませんでした。

とりあえず End ステートメントを使わないようにするだけでいいと思います。


[ メッセージ編集済み 編集者: 架空兎 編集日時 2003-12-03 01:05 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-03 08:58
引用:

MSDNの「End ステートメント」- Visual Basic 言語リファレンス -

End ステートメントを実行すると、モジュール レベルとクラス レベルのすべての変数と、すべてのモジュール内の静的変数が初期化されます。


全て初期化されるそうです。初期化対象かな?

[ メッセージ編集済み 編集者: Jitta 編集日時 2003-12-03 08:59 ]

スキルアップ/キャリアアップ(JOB@IT)