FC2ブログ

プロセス実行(アプリケーションの実行)について

プロセス実行(アプリケーションの実行)

指定したプログラムを実行します。
プログラムの引数やウィンドウ表示(コマンドプロンプトは効きますが、アプリケーションがサポートしていなければ効きません。まぁ、オマケです。)、キャンセルの受付なども指定できます。
このやり方は、いろいろありこれが正しいとは思いませんが、引数の組み合わせでなかなかうまくいかず、私の要望に合うやり方が以下のやり方でした。まだまだ、改良の余地があるような、、、いや、絶対ある!

ちなみに、変数宣言とプロパティは、キャンセル処理受付用です。キャンセル処理を行なわないのであれば、不要です。また、サンプルでは、処理経過時間の取得や、プロセスの出力取得(コメントしてありますが)も追加してあります。

#Region "■■■ 変数宣言 ■■■"

  '--------------------------------------------------
  ' プロセス関連
  '--------------------------------------------------

  Private mblnProcCancel As Boolean = False

#End Region


#Region "■■■ プロパティ ■■■"

  '==============================================================================
  '
  ' プロセスキャンセル
  '
  '==============================================================================

  Public Property ProcCancel() As Boolean
    Get
      Return mblnProcCancel
    End Get
    Set(ByVal value As Boolean)
      mblnProcCancel = value
    End Set
  End Property

#End Region


#Region "■■■ 関数 ■■■"
  '==============================================================================
  '
  ' プロセス実行
  '
  ' ------------------------------------------------------------------------
  ' 説明 : プロセスを実行する
  '
  ' ------------------------------------------------------------------------
  ' 引数 : strCMD       実行プログラム
  '    strPara       引数
  '    blnCreateNoWindow  ウィンドウ表示
  '    blnCancel      キャンセル処理受付
  '    strErrMsg      エラーメッセージ
  ' 戻値 : プロセス終了コード
  '
  '==============================================================================

  Public Function fncProcRun(ByVal strCMD As String, ByVal strPara As String, _
                ByVal blnCreateNoWindow As Boolean, ByVal blnCancel As Boolean, _
                Optional ByRef strErrMsg As String = "") As Integer

    Dim proMainProcess As System.Diagnostics.Process = Nothing
    Dim proMainProcessInfo As New System.Diagnostics.ProcessStartInfo
    Dim intExitCode As Integer
    Dim proKillProcess As System.Diagnostics.Process = Nothing

    Try

      '--------------------------------------------------
      ' プロセス準備
      '--------------------------------------------------

       With proMainProcessInfo
         .FileName = strCMD
         .Arguments = strPara
         .UseShellExecute = False
         .CreateNoWindow = Not blnCreateNoWindow 'ウィンドウ表示
      End With


      '--------------------------------------------------
      ' プロセス監視
      '--------------------------------------------------

      If Not blnCancel Then
        'プロセス終了まで待機
        proMainProcess.WaitForExit()
      Else
        'プロセスキャンセルフラグ:Trueまで処理する。
        Do Until Me.ProcCancel

          'DoEvent(キャンセル処理を受け付ける)
          Application.DoEvents()

          'プロセスが終了したら、プロセスフラグ:True
          If proMainProcess.HasExited Then
            Exit Do
          End If
        Loop

        'プロセスが終了しているかチェック(キャンセルした場合、終了していないので強制終了する)
        If Not proMainProcess.HasExited Then
          '強制終了
          proMainProcess.Kill()
          proMainProcess.Dispose()
        End If
      End If

      'プロセス終了取得
      intExitCode = proMainProcess.ExitCode

      'プロセス解放
      proMainProcess.Close()
      proMainProcess.Dispose()

      '終了
      Return intExitCode

    Catch ex As Exception

      '--------------------------------------------------
      ' エラーメッセージ設定
      '--------------------------------------------------

      strErrMsg = "プログラムの実行に失敗しました。" & vbCrLf & _
            "詳細は以下のとおり" & vbCrLf & _
            "--------------------------------------------------" & vbCrLf & _
            "実行プログラム:" & strCMD & vbCrLf & _
            "引数:" & strPara & vbCrLf & _
            ex.Message


      '--------------------------------------------------
      ' 戻り値設定
      '--------------------------------------------------

      Return 9

    End Try

  End Function
#End Region



【宣伝・・・(*´ω`)】

タイトルロゴ3

 システム葵では、個人様向けでも企業様向けでも、パソコン修理から、パソコン設定、パソコンの使い方、LAN環境構築、ソフトウェア開発まで、様々な実績がありますので、困ったことがあれば、お気軽にご相談下さい。
関連記事

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

検索フォーム
最新記事
カテゴリ
全記事表示リンク

全ての記事を表示する

最新コメント
プロフィール

ITLife

Author:ITLife
システム葵新井聡太です。
東京都東村山市に生まれ、ここで育ち、ここで結婚し、システムエンジニア一筋で十数年やってきました。
ここでは主に、パソコンを中心にITに関わることを備忘録として残していきたいと思います。
少しでも来ていただいた方のお役に立てたら幸いです。
m(_ _)m

p.s
ここで紹介している内容は一例です。すべては、自己責任でお願いします。

カレンダー
07 | 2019/08 | 09
- - - - 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
訪問数
月別アーカイブ
リンク