VBScriptでVB.NETのプログラム(EXEファイル)を起動し、VB.NETで「終了コード」を設定してみる。
また、呼び出し元のVBScriptで終了コードを取得し、Windowsの「イベントログ」に出力してみる。
なお、Visual Studioのバージョンは以下です。
- Visual Studio Professional 2012
VB.NETで終了コードを設定
終了コードは、「Environment」クラスの「ExitCode」プロパティに設定してやる。
VB.NETのソースコードはこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Public Class ClsMain <STAThread()> _ Shared Sub Main() Try 'フォームの起動 Application.Run( New FrmTest) '終了コードを設定 Environment.ExitCode = 0 Catch ex As Exception '終了コードを設定 Environment.ExitCode = 1 End Try End Sub End Class |
VBScriptで終了コードを判定
ポイントは以下。
EXEファイルを起動し、「Status」プロパティが「0(ジョブ実行中)」から「1(ジョブ実行完了)」になるまでループ待機する。
終了コードの判定は、「ExitCode」プロパティで行う。
イベントログの出力は、シェルオブジェクトの「LogEvent」メソッドで行う。
イベントの種類は以下。
- 「0」…成功
- 「1」…エラー
- 「2」…警告
- 「4」…情報
- 「8」…成功の監査
- 「16」…失敗の監査
呼び出し元のVBScriptのソースコードはこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | Option Explicit '定数 Const EVENT_SUCCESS = 0 Const EVENT_ERROR = 1 Const EVENT_WARN = 2 Const EVENT_INFO = 4 '変数 Dim objShell Dim exec 'シェルオブジェクト作成 Set objShell = CreateObject( "WScript.Shell" ) 'イベントログ出力 objShell.LogEvent EVENT_INFO, "開始しました。" 'プログラム実行 Set exec = objShell.Exec( "C:\Projects\vb\Test\Test\bin\Release\Test.exe" ) 'プログラム実行完了までループ待機 Do While exec.Status = 0 WScript.Sleep 100 Loop If exec.ExitCode = 0 Then '終了コードが0(正常終了)の場合 'イベントログ出力 objShell.LogEvent EVENT_SUCCESS, "正常終了しました。" ElseIf exec.ExitCode = 1 Then '終了コードが1(エラー)の場合 'イベントログ出力 objShell.LogEvent EVENT_ERROR, "異常終了しました。" End If 'シェルオブジェクト破棄 Set objShell = Nothing |
イベントログの確認
「スタート」⇒「コントロールパネル」⇒「コンピュータの管理」を開く。
左側の「システムツール」⇒「イベントビューアー」⇒「Windowsログ」⇒「アプリケーション」を選択すると表示される。
コメント