他アプリケーションを実行するには

解決


あきたいぬ  2007-10-30 23:46:29  No: 144037

いつもお世話になっております。

VB2005のプログラム上から、他アプリを実行したいのですが、
うまくいきません。

動作確認の手順は以下になります。
(1)他アプリをINIファイルを引数にして実行
(2)他アプリが処理終了、またはタイムアウトまで待機
(3)処理結果を判断

以前はVB6にてSHELL起動をしており、標準APIのOpenProcess/
WaitForSingleObject/CloseHandle  などを利用して(2)の
タイムアウトを判断していました。
今回はVB2005のSHELLまたはPROCESSを利用して実行させたいと
思っています。

SHELL起動においては
  proID = Shell(EXE parameter, hide, true, 10000)
として実行までは出来るのですが、その後のタイムアウトの判定が
どうしたらよいかわかりませんでした。

PROCESS起動においては
   Dim proc As New Process()
   proc.StartInfo.FileName = EXE
   proc.Start()
では、引数parameterを設定できませんし、
   Process.Start(EXE parameter)
では、タイムアウト値を設定できません。

サンプルなどいろいろ探してはいるのですが、思うようなものがなく、
困り果てています。
どなたかご教授いただけませんでしょうか。


大吉末吉  2007-10-30 23:55:40  No: 144038

これは?

「Process.WaitForExit メソッド (Int32)」
http://msdn2.microsoft.com/ja-jp/library/ty0d8k56(VS.80).aspx


大吉末吉  2007-10-31 00:20:37  No: 144039

あ、問題を勘違いしてたかも・・・

ひょっとして、こうしたいのかな・・・
-------------------------------------------
        Dim proc As Process
        proc = Process.Start(EXE, parameter)
        proc.WaitForExit(10000)
-------------------------------------------


あきたいぬ  2007-10-31 00:35:28  No: 144040

大吉末吉さん、さっそくの回答ありがとうございます。

>「Process.WaitForExit メソッド (Int32)」
>(http://msdn2.microsoft.com/ja-jp/library/ty0d8k56(VS.80).aspx

提示していただいたメソッドでは試してみましたが、
  「非共有メンバを参照するにはオブジェクト参照が必要です。」
と言われてしまいます。
ですが、もう一度確認してみたところ、以下の手順で確認できた
のではと思っています。

    Dim proc As New Process()
    proc.StartInfo.FileName = "notepad.exe"
    proc.StartInfo.Arguments = "d:\text.txt"  ←ここで引数設定できました。。。
    proc.Start()
    If proc.WaitForExit(1000) = True Then
        MsgBox("処理終了")
    Else
        MsgBox("タイムアウト")
    End If
    proc.Close()

ありがとうございました。


あきたいぬ  2007-10-31 00:52:50  No: 144041

【解決】チェックを忘れていました。
失礼しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加