いつもお世話になっております。
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)
では、タイムアウト値を設定できません。
サンプルなどいろいろ探してはいるのですが、思うようなものがなく、
困り果てています。
どなたかご教授いただけませんでしょうか。
これは?
「Process.WaitForExit メソッド (Int32)」
(http://msdn2.microsoft.com/ja-jp/library/ty0d8k56(VS.80).aspx)
あ、問題を勘違いしてたかも・・・
ひょっとして、こうしたいのかな・・・
-------------------------------------------
Dim proc As Process
proc = Process.Start(EXE, parameter)
proc.WaitForExit(10000)
-------------------------------------------
大吉末吉さん、さっそくの回答ありがとうございます。
>「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()
ありがとうございました。
【解決】チェックを忘れていました。
失礼しました。
ツイート | ![]() |