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

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

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

Re[5]: vb.netでdosの結果を受け取りたい


(過去ログ 64 を表示中)

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

■36847 / inTopicNo.1)  vb.netでdosの結果を受け取りたい
  
□投稿者/ A.V.A (1回)-(2009/06/08(Mon) 01:40:55)

分類:[.NET 全般] 

2009/06/08(Mon) 01:47:23 編集(投稿者)
2009/06/08(Mon) 01:47:20 編集(投稿者)
2009/06/08(Mon) 01:47:17 編集(投稿者)

早速ですが、フォーム上でファイル名を入力し、ボタンを押すと
dosで"java 入力したファイル名" というコマンドを実行し、
その結果をフォームのテキストボックスに挿入したいのですが、
どうしたらいいのかわかりません、
以下のように行ってしまうとdosのディレクトリが間違っているせいか、なにも返ってききません、
dosの作業領域をアプリケーションが置いてあるディレクトリにし、"java 入力したファイル名"の
結果を得るためにはどうしたらよろしいか、ご教授ください。

Dim results As String
Dim psi As New System.Diagnostics.ProcessStartInfo()

'ComSpecのパスを取得する(この記述の意味がわかりません;)
psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec")
'出力を読み取れるようにする
psi.RedirectStandardInput = False
psi.RedirectStandardOutput = True
psi.UseShellExecute = False
'ウィンドウを表示しないようにする
psi.CreateNoWindow = True
'コマンドラインを指定
psi.Arguments = "cmd.exe /c java test.java"
'起動
Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(psi)
'出力を読み取る
results = p.StandardOutput.ReadToEnd
'出力された結果を表示
textbox.text = results

p.WaitForExit()

引用返信 編集キー/
■36848 / inTopicNo.2)  Re[1]: vb.netでdosの結果を受け取りたい
□投稿者/ .SHO (861回)-(2009/06/08(Mon) 09:01:08)
フルパスで指定するとか?
引用返信 編集キー/
■36849 / inTopicNo.3)  Re[2]: vb.netでdosの結果を受け取りたい
□投稿者/ すがり (33回)-(2009/06/08(Mon) 09:15:47)
>psi.Arguments = "cmd.exe /c java test.java"→"java test"

コマンド間違ってると思いますよ。
コンパイルするなら"javac test.java"だし。
引用返信 編集キー/
■36853 / inTopicNo.4)  Re[1]: vb.netでdosの結果を受け取りたい
□投稿者/ よねKEN (347回)-(2009/06/08(Mon) 10:10:29)
> psi.Arguments = "cmd.exe /c java test.java"

psi.Arguments = "/c javac test.java"
ではないでしょうか。

> 'ComSpecのパスを取得する(この記述の意味がわかりません;)
> psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec")

ここでcmd.exeのパス(DOSプロンプトの実行ファイル)を取得しています。
Argumentsプロパティにセットするのは、cmd.exeに対するコマンドライン引数です。
引用返信 編集キー/
■36863 / inTopicNo.5)  Re[3]: vb.netでdosの結果を受け取りたい
□投稿者/ A.V.A (2回)-(2009/06/08(Mon) 13:22:49)
No36849 (すがり さん) に返信
> >psi.Arguments = "cmd.exe /c java test.java"→"java test"
>
直してみましたがうまくいきませんでした
引用返信 編集キー/
■36864 / inTopicNo.6)  Re[4]: vb.netでdosの結果を受け取りたい
□投稿者/ オショウ (217回)-(2009/06/08(Mon) 13:28:21)
> 直してみましたがうまくいきませんでした

  先のフルパスの指定の話ですが・・・

  test.javaをスルパス指定しないと・・・

  基本は、ComSpecで指定された多分『c:\windows\system32』だと思うのですが。
  もしくはそのプログラムを実行したフルパス・・・

  cmd.exeが実行された時点で、どこのディレクトリに居るのか解っていないので
  java に食わせるtest.javaの所在が正しく渡っていないのでは?

※ 正しくリダイレクトできていれば、エラーの内容も取得できていると思うので
  すが、そういうエラー情報は無いの?

以上。
引用返信 編集キー/
■36865 / inTopicNo.7)  Re[2]: vb.netでdosの結果を受け取りたい
□投稿者/ みきぬ (459回)-(2009/06/08(Mon) 13:42:27)
プログラムのことは一旦横に置いといて、コマンドラインで実行したい構文がなんなのか、確認したほうがいいと思うんだ。
引用返信 編集キー/
■36868 / inTopicNo.8)  Re[2]: vb.netでdosの結果を受け取りたい
□投稿者/ A.V.A (3回)-(2009/06/08(Mon) 13:48:04)
No36853 (よねKEN さん) に返信
>>psi.Arguments = "cmd.exe /c java test.java"
>
> psi.Arguments = "/c javac test.java"
> ではないでしょうか。

psi.Arguments = "/c javac D:\java\ex002.java"
でやってみましたが、何も返ってきませんでした;
一回最初に戻って、
javac や java のコマンドを実行したときの、コンパイルエラー、実行結果などを
テキストボックスに挿入して表示させたいのですが、
どのような方法があるのでしょうか?

>
>>'ComSpecのパスを取得する(この記述の意味がわかりません;)
>>psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec")
>
> ここでcmd.exeのパス(DOSプロンプトの実行ファイル)を取得しています。
> Argumentsプロパティにセットするのは、cmd.exeに対するコマンドライン引数です。

これは納得できました!ありがとうございます
引用返信 編集キー/
■36875 / inTopicNo.9)  Re[3]: vb.netでdosの結果を受け取りたい
□投稿者/ らじうむ (9回)-(2009/06/08(Mon) 15:32:24)
No36868 (A.V.A さん) に返信
> ■No36853 (よねKEN さん) に返信
> >>psi.Arguments = "cmd.exe /c java test.java"
>>
>>psi.Arguments = "/c javac test.java"
>>ではないでしょうか。
>
> psi.Arguments = "/c javac D:\java\ex002.java"
> でやってみましたが、何も返ってきませんでした;
> 一回最初に戻って、
> javac や java のコマンドを実行したときの、コンパイルエラー、実行結果などを
> テキストボックスに挿入して表示させたいのですが、
> どのような方法があるのでしょうか

一応の確認ですがコマンドプロンプトから直接実行した場合は
期待通りの出力が吐かれているんですよね?
引用返信 編集キー/
■36877 / inTopicNo.10)  Re[4]: vb.netでdosの結果を受け取りたい
□投稿者/ すがり (34回)-(2009/06/08(Mon) 16:20:16)
>dosの作業領域をアプリケーションが置いてあるディレクトリにし、"java 入力したファイル名"の
>結果を得るためにはどうしたらよろしいか、ご教授ください。

javaコマンドで実行時引数としてファイル名を渡して実行結果を受け取りたいということですか?
そもそも実行結果はどういう風に出力しているのかと・・・
まさかSystem.out.printlnの結果が返ってくると思っていませんよね?

>psi.Arguments = "cmd.exe /c java test.java"

↑どうみてもjavaコマンド間違えでコンパイルも実行もできないと思うんですが。

とりあえず実現だけできればいいのであれば、process起動でJavaプログラム側で結果をファイルに出力し、
processの終了を待って吐き出したファイルを読み取ればいいんじゃないかと。(予測できない結果になっても
知りませんが)

あとはJNIでやってくれ、くらいしか・・・
引用返信 編集キー/
■36878 / inTopicNo.11)  Re[5]: vb.netでdosの結果を受け取りたい
□投稿者/ みきぬ (460回)-(2009/06/08(Mon) 16:43:25)
とりあえずこれでエラー出力も出てくると思う。

Dim results As String
Dim errors As String
Dim psi As New System.Diagnostics.ProcessStartInfo()

'ComSpecのパスを取得する
psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec")
'出力を読み取れるようにする
psi.RedirectStandardInput = False
psi.RedirectStandardOutput = True
psi.RedirectStandardError = True
psi.UseShellExecute = False
'ウィンドウを表示しないようにする
psi.CreateNoWindow = True
'コマンドラインを指定("/c"は実行後閉じるために必要)
psi.Arguments = "/c " & TextBox1.Text
'起動
Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(psi)
'出力を読み取る
results = p.StandardOutput.ReadToEnd
errors = p.StandardError.ReadToEnd
'出力された結果を表示
textbox.Text = results
textbox.Text &= errors
'WaitForExitはReadToEndの後である必要がある
'(親プロセス、子プロセスでブロック防止のため)
p.WaitForExit()

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -