C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: アプリケーションの戻り値を取得


(過去ログ 89 を表示中)

[トピック内 15 記事 (1 - 15 表示)]  << 0 >>

■53069 / inTopicNo.1)  アプリケーションの戻り値を取得
  
□投稿者/ どこめ (7回)-(2010/09/02(Thu) 15:19:51)

分類:[VB.NET/VB2005 以降] 

2010/09/02(Thu) 15:20:43 編集(投稿者)

大変お世話になっております。
C:\TMP\AAA.EXEを起動してその戻り値を取得したいのですが、
下の物は、Notepadなので、全く異なると思いますが、どう変えれば良いでしょうか?

' メモ帳を起動して、Process のインスタンスを取得する
Dim hProcess As System.Diagnostics.Process = System.Diagnostics.Process.Start("Notepad")
' 終了するまで待機する
hProcess.WaitForExit()
' 終了コードを取得する
Dim iExitCode As Integer = hProcess.ExitCode
' 取得した終了コードを表示する
MessageBox.Show(iExitCode.ToString())
' 不要になった時点で破棄する (正しくは オブジェクトの破棄を保証する を参照)
hProcess.Close()
hProcess.Dispose()

引用返信 編集キー/
■53072 / inTopicNo.2)  Re[1]: アプリケーションの戻り値を取得
□投稿者/ Hongliang (698回)-(2010/09/02(Thu) 15:36:35)
そのまま実行ファイルの名前を変えるだけで良いと思いますが。
引用返信 編集キー/
■53073 / inTopicNo.3)  Re[1]: アプリケーションの戻り値を取得
□投稿者/ ごう (176回)-(2010/09/02(Thu) 15:38:54)
No53069 (どこめ さん) に返信
> 2010/09/02(Thu) 15:20:43 編集(投稿者)


> 大変お世話になっております。
> C:\TMP\AAA.EXEを起動してその戻り値を取得したいのですが、
> 下の物は、Notepadなので、全く異なると思いますが、どう変えれば良いでしょうか?

質問
1. 「C:\TMP\AAA.EXEを起動して」とありますが、今から作るプログラムを起動させる前に(何らかの手段で既に)起動されているものですか?
 それとも今から作るプログラムによって起動させるんですか?

2. アプリケーションの「戻り値」って何のことを指していますか? 終了コード? 
 終了コードではないんだったら、アプリケーション「C:\TMP\AAA.EXE」からどんな情報を得たいか詳しく書いてください。




引用返信 編集キー/
■53074 / inTopicNo.4)  Re[2]: アプリケーションの戻り値を取得
□投稿者/ どこめ (8回)-(2010/09/02(Thu) 16:14:22)
2010/09/02(Thu) 16:18:26 編集(投稿者)

No53072 (Hongliang さん) に返信
> そのまま実行ファイルの名前を変えるだけで良いと思いますが。
C:\TMP\AAA.EXEを書いただけでは、終了コードを表示するだけなので0となります。

ごうさん
1. 今から作るプログラムによって起動させます。
2. アプリケーションの「戻り値」終了コードではありません。「C:\TMP\AAA.EXE」からは、文字列が一つだけ返ります。

hProcess.StandardOutput.ReadToEndを実行して戻り値を取得するのではないかとまで調べたのですが。
済みませんが宜しくお願い致します。
results = hProcess.StandardOutput.ReadToEndがエラーします。


' メモ帳を起動して、Process のインスタンスを取得する
Dim hProcess As System.Diagnostics.Process = System.Diagnostics.Process.Start("F:\TMP\TEST.EXE")
Dim results As String
' 終了するまで待機する
hProcess.WaitForExit()
'出力を読み取る
results = hProcess.StandardOutput.ReadToEnd
' 取得した終了コードを表示する
MessageBox.Show(results)
hProcess.Close()
hProcess.Dispose()

引用返信 編集キー/
■53075 / inTopicNo.5)  Re[3]: アプリケーションの戻り値を取得
□投稿者/ クキモン (1回)-(2010/09/02(Thu) 16:31:44)
No53074 (どこめ さん) に返信
> results = hProcess.StandardOutput.ReadToEndがエラーします。

どのようなエラーでしょうか?
例外の内容を教えてください
引用返信 編集キー/
■53076 / inTopicNo.6)  Re[3]: アプリケーションの戻り値を取得
□投稿者/ クキモン (2回)-(2010/09/02(Thu) 16:36:42)
No53074 (どこめ さん) に返信

そもそも、

> ' 終了するまで待機する
> hProcess.WaitForExit()

でプロセスが終了してしまうので、

> '出力を読み取る
> results = hProcess.StandardOutput.ReadToEnd

で標準出力は取れないんじゃないの?

標準出力を読み取ってからWaitForExitしてみたらどうですか。
引用返信 編集キー/
■53077 / inTopicNo.7)  Re[3]: アプリケーションの戻り値を取得
□投稿者/ ごう (177回)-(2010/09/02(Thu) 16:39:46)
No53074 (どこめ さん) に返信
>「C:\TMP\AAA.EXE」からは、文字列が一つだけ返ります。

これがわかりません。
もしかして、「C:\TMP\AAA.EXE」はコンソールアプリで、
そこに出力される文字列を取得したいと言うことですか?

例えば、こんなの。
http://dobon.net/vb/dotnet/process/standardoutput.html

> results = hProcess.StandardOutput.ReadToEndがエラーします。
エラー内容で何が起きているか推測できるかもしれないので、
エラーが発生したら、その内容(メッセージ)を略さず書いてください。

とりあえず、マニュアルの「例」の部分(VB)をしっかり読んでみてはいかがでしょう。
(わからない単語は検索してみてください)
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.standardoutput.aspx


引用返信 編集キー/
■53089 / inTopicNo.8)  Re[4]: アプリケーションの戻り値を取得
□投稿者/ どこめ (9回)-(2010/09/02(Thu) 21:50:39)
No53076 (クキモン さん) に返信
> results = hProcess.StandardOutput.ReadToEndがエラーします。
のエラー内容は
(StandardOutがリダイレクトされていないか、またはプロセスが開始されていませんでした。)

>標準出力を読み取ってからWaitForExitしてみたらどうですか。
上と同じエラーでした。

引用返信 編集キー/
■53090 / inTopicNo.9)  Re[5]: アプリケーションの戻り値を取得
□投稿者/ 魔界の仮面弁士 (1786回)-(2010/09/02(Thu) 22:14:44)
No53089 (どこめ さん) に返信
>>results = hProcess.StandardOutput.ReadToEndがエラーします。
> のエラー内容は
> (StandardOutがリダイレクトされていないか、またはプロセスが開始されていませんでした。)

文字通り、RedirectStandardOutput を設定し忘れている、とか? (UseShellExecute も)
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.standardoutput%28VS.80%29.aspx
引用返信 編集キー/
■53101 / inTopicNo.10)  Re[6]: アプリケーションの戻り値を取得
□投稿者/ ごう (179回)-(2010/09/03(Fri) 09:28:38)
マニュアル(msdn)の「例」(VB)の部分をそのまま利用するだけで当方では出来ちゃったけどなー
※"F:\TMP\TEST.EXE"がコンソールアプリ(黒いDOSプロンプト画面上で入出力を行うアプリ)であったとしたらね。

http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.standardoutput.aspx


引用返信 編集キー/
■53112 / inTopicNo.11)  Re[7]: アプリケーションの戻り値を取得
□投稿者/ どこめ (10回)-(2010/09/03(Fri) 14:27:48)
魔界の仮面弁士さん
>文字通り、RedirectStandardOutput を設定し忘れている、とか? (UseShellExecute も)
>http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.standardoutput%28VS.80%29.aspx

これにより下の物を修正して組み込むものと思いましたが、あまりに知識不足で

Dim myProcess As New Process()
Dim myProcessStartInfo As New ProcessStartInfo("Process_StandardOutput_Sample.exe")
myProcessStartInfo.UseShellExecute = False
myProcessStartInfo.RedirectStandardOutput = True

myProcessStartInfoをhProcessに変えるのだろうとかやってみましたが無理でした。
大変お世話になり申し訳ないのですが。
大きな考え違いをしていた事にも気づき、この方法は諦める事にします。

引用返信 編集キー/
■53113 / inTopicNo.12)  Re[8]: アプリケーションの戻り値を取得
□投稿者/ どこめ (11回)-(2010/09/03(Fri) 14:29:54)
ごうさん
教えて頂いてあちこち調べましたが、
なんだか大変お恥ずかしい質問をしていたと今頃気づきました。
"F:\TMP\TEST.EXE"これは、別の者がVisualCで書きます。
"F:\TMP\TEST.EXE"はWINDOWSのフォームアプリケーションで作るとの事です。
この場合AAA.EXEからは終了コードくらいしか受け取れないの
ですね、きっと。(文字列は無理)
>※"F:\TMP\TEST.EXE"がコンソールアプリ(黒いDOSプロンプト画面上で入出力
を行うアプリ)であったとしたらね。
確認しましたら、コンソールアプリでは確かに動作しました。
と言う事で、大変いろいろ教えて頂いたにもかかわらず、私の知識がお粗末で
大変ご迷惑をおかけしました。
ちなみに、"F:\TMP\TEST.EXE"もVB.NETで作るとしたら、いくつでも
パラメータ渡しとか出来るのでしょうか?調べましたが、わかりませんでした。
簡単に出来るか出来ないかだけでも教えて頂くと有り難いです。

引用返信 編集キー/
■53114 / inTopicNo.13)  Re[8]: アプリケーションの戻り値を取得
□投稿者/ shu (4回)-(2010/09/03(Fri) 14:35:35)
No53112 (どこめ さん) に返信
> 魔界の仮面弁士さん
> >文字通り、RedirectStandardOutput を設定し忘れている、とか? (UseShellExecute も)
> >http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.standardoutput%28VS.80%29.aspx
>
> これにより下の物を修正して組み込むものと思いましたが、あまりに知識不足で
>
> Dim myProcess As New Process()
> Dim myProcessStartInfo As New ProcessStartInfo("Process_StandardOutput_Sample.exe")
> myProcessStartInfo.UseShellExecute = False
> myProcessStartInfo.RedirectStandardOutput = True
>
> myProcessStartInfoをhProcessに変えるのだろうとかやってみましたが無理でした。
hProcessは無しで

myProcess.StartInfo = myProcessStartInfo
myProcess.Start()

これで実行すればよいのでは?hProcessにこだわるなら、myProcessをすべてhProcessにすれば同じ。


引用返信 編集キー/
■53117 / inTopicNo.14)  Re[9]: アプリケーションの戻り値を取得
□投稿者/ ごう (180回)-(2010/09/03(Fri) 14:50:56)
No53113 (どこめ さん) に返信
> "F:\TMP\TEST.EXE"これは、別の者がVisualCで書きます。

> ちなみに、"F:\TMP\TEST.EXE"もVB.NETで作るとしたら、いくつでも
> パラメータ渡しとか出来るのでしょうか?調べましたが、わかりませんでした。
> 簡単に出来るか出来ないかだけでも教えて頂くと有り難いです。

2つのEXE間のデータのやりとりについては、"F:\TMP\TEST.EXE"を作成している人とよく相談されることをおすすめします。
共有のファイルを使って、データをやり取りするとか、方法は色々あると思いますが、
今回のケースの場合は、掲示板で聞くより、"F:\TMP\TEST.EXE"の仕様と、今作っているプログラムとの仕様を
作成者お互いがしっかり打ち合わせ(レビュー等)された方が、問題解決の近道であると私は思います。


引用返信 編集キー/
■53142 / inTopicNo.15)  Re[10]: アプリケーションの戻り値を取得
□投稿者/ どこめ (12回)-(2010/09/03(Fri) 22:44:17)
shuさんご回答有り難う御座いました。
教えて頂いた事私なりにやってみましたが、
やはりわけわからずやってるので無理でした。
済みませんが、この方法では諦めます。

ごうさん大変有り難う御座います。
確かに共有のファイルを使ってとか言う方法なら確実に出来るので、
その方法を検討します。大変お手数をおかけしました。
有り難う御座いました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -