VB.NETで終了コードを設定し、VBScriptで終了コードを判定する

VBScript プログラミング
この記事は約4分で読めます。

※当ブログではアフィリエイト広告を利用しています。

VBScriptでVB.NETのプログラム(EXEファイル)を起動し、VB.NETで「終了コード」を設定してみる。

また、呼び出し元のVBScriptで終了コードを取得し、Windowsの「イベントログ」に出力してみる。

なお、Visual Studioのバージョンは以下です。

  • Visual Studio Professional 2012

VB.NETで終了コードを設定

終了コードは、「Environment」クラスの「ExitCode」プロパティに設定してやる。

VB.NETのソースコードはこちら。

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のソースコードはこちら。

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ログ」⇒「アプリケーション」を選択すると表示される。

参考サイト

VBScript Tips (Tips0106)

[VB.NET]戻り値を返せるのかな? - Insider.NET - @IT

Status プロパティ (WshScriptExec)

LogEvent メソッド

@IT:Windows TIPS — Tips:イベント・ログに任意の文字列を出力する

コメント

タイトルとURLをコピーしました