• 締切済み

コマンドプロンプトを表示せずにプロセスの起動

VB.NETでソースファイルをJ2sk142(javac.exe)に渡してコンパイルの結果をコマンドプロンプトではなくVBのTextBoxに表示するプログラムを作成しています。 でも、プロセスを起動すると一瞬だけプロンプトが表示されます。 これを表示させない方法はありますでしょうか? With Process1 .StartInfo.FileName=JAVACPATH .StartInfo.Arguments=TextBox.Text .StartInfo.WorkingDirectory=ProPath .StartInfo.UseShellExecute = False .StartInfo.ErrorDialog = True .EnableRaisingEvents = True .StartInfo.RedirectStandardOutput = True .StartInfo.RedirectStandardError = True .StartInfo.WindowStyle = ProcessWindowStyle.Hidden End With Try Process1.Start() OutPutTextBox.Text &= Process1.StandardOutput.ReadToEnd OutPutTextBox.Text &= Process1.StandardError.ReadToEnd Process1.WaitForExit() Catch ex As Exception

みんなの回答

  • kakusuke
  • ベストアンサー率36% (95/259)
回答No.1

.StartInfo.CreateNoWindow = true で。

hieemon5
質問者

お礼

早速回答ありがとうございます。 試してみましたができました。 本当にありがとうございます。

関連するQ&A

  • C# コマンドプロンプト画面で表示された文字の取得

    Windowsフォームアプリケーションからコマンドプロンプトを起動して、コマンドを実行した際に出る出力をフォームアプリケーション側から受け取ろうとしています。 テスト内容では成功するのですが、受け取りたい対象の内容は取得できずに困っています。 例えばコマンドプロンプト上で hoge と入力し実行すると 「'hoge' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 と表示されます。 しかし、前述カッコ内の表示をアプリケーション側から受け取ることが出来ませんでした。 どのようにすれば受け取ることができるでしょうか? 単純な path などを実行した場合は受け取れました。 以下が試した内容です。 Process ps = new Process(); ps.StartInfo.FileName = Environment.GetEnvironmentVariable("ComSpec"); ps.StartInfo.Arguments = @"/C hoge"; ps.StartInfo.UseShellExecute = false; ps.StartInfo.RedirectStandardOutput = true; ps.StartInfo.CreateNoWindow = true; ps.Start(); string output = ps.StandardOutput.ReadToEnd(); ps.WaitForExit(); ps.Dispose(); MessageBox.Show(output);//空の内容しか表示されない //テストで hoge を path にした際はシステム環境変数が表示された ・環境 Windows 7 Professional 64bit VC# 2010 Express よろしくお願いいたします。

  • コマンドプロンプトを終了せずにリダイレクトするには?

    コマンドプロンプトを終了せずにリダイレクトするには? VBからコマンドプロンプトを操作し、結果をLabelに貼り付けることを考えています。 しかし、コマンドプロンプトを起動するプロセスにリダイレクト設定をしたところ、実行するたびに終了してしまい、その後のコマンド入力でプロセスが見つからずエラーとなってしまいます。コマンドプロンプトは終了せずにリダイレクトの設定する方法を教えて頂けないでしょうか。 また、コマンドプロンプト自体は表示させずに実行できるのが理想なので、やり方のヒントだけでも頂けると助かります。 操作例(VBのボタンから):cmd.exe起動 → cd c:\ → dir エラー内容:プロセス 'c:\windows\system32\cmd.exe' が見つかりませんでした。 動作環境:VB2005、Windows XP ============================== Public Class Form1 Private Sub Button19_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button19.Click Dim P1 As New System.Diagnostics.Process P1.StartInfo.UseShellExecute = False P1.StartInfo.RedirectStandardOutput = True P1.StartInfo.FileName = "cmd.exe" P1.Start() End Sub Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click AppActivate("c:\windows\system32\cmd.exe") SendKeys.SendWait("CD c:\{Enter}") Label5.Text = P1.StandardOutput.ReadToEnd() End Sub Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click AppActivate("c:\windows\system32\cmd.exe") SendKeys.SendWait("DIR{Enter}") Label5.Text = P1.StandardOutput.ReadToEnd() End Sub

  • コマンドプロンプトの出力をテキストボックスへ表示する方法について

    コマンドプロンプトの出力をテキストボックスへ表示する方法について 現在、VBを使ったプログラミングを行っています。 以下に質問内容を示しますので、回答を宜しくお願いします。 <環境> OS:Windows XP 開発ソフト:VB2008 express edition 質問:コマンドプロンプトの出力をテキストボックスへ表示する方法について リダイレクトを使って、コマンドプロンプトの出力結果をVBのフォーム上(テキストボックス) に表示したいのですが、常に出力が更新されるコマンドの場合、実行後にフリーズが起きてしまいます。 以下の例ではpingを送っていますが、テキストボックスには常にコマンドの出力結果が更新されません。(実行が終わるまで待つ必要がある) 理想としては、pingコマンドを実行したときの結果が、そのままテキストボックス上にリアルタイムに表示されることです。 リアルタイムにテキストボックスにコマンドプロンプトの結果を表示するには、 どのような設定が必要になるのでしょうか? ご教授願います。宜しくお願いします。 ----- 以下サンプルソース ----- Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 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 'コマンドラインを指定("/c"は実行後閉じるために必要) psi.Arguments = "/c ping 192.168.1.1" '起動 Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(psi) '出力を読み取る results = p.StandardOutput.ReadToEnd '出力された結果を表示 TextBox1.Text = results 'WaitForExitはReadToEndの後である必要がある '(親プロセス、子プロセスでブロック防止のため) p.WaitForExit() End Sub End Class

  • VBでコンソールアプリの出力を取得したいのですが

    ネット上で入手したコマンドプロンプト上で使うアプリをGUIで操作できるようにしたく出力を取得したいのですが出来ません。 ネットで出力の取得方法を調べて下記のようにしているのですがどうやっても取得できません・・・ (ipconfig や dir 等は問題なく取得できたのですが・・・) VBは2008です Dim p As New Process() p.StartInfo.FileName = "cmd.exe" ' 実行するファイル p.StartInfo.Arguments = "aaa.exe" ' 目的のアプリ p.StartInfo.CreateNoWindow = True ' コンソールを開かない p.StartInfo.UseShellExecute = False ' シェル機能を使用しない p.StartInfo.RedirectStandardOutput = True ' 標準出力をリダイレクト p.Start() ' アプリの実行開始 Dim output As String = p.StandardOutput.ReadToEnd() ' 標準出力の読み取り output = output.Replace(vbCr + vbCrLf, vbLf) ' 改行コードの修正 TextBox1.Text = output ' [出力]ウィンドウに出力 試しに自分で文字を表示するだけのコンソールアプリを作成して試したのですがそれは取得できました。 目的のアプリが特殊なのでしょうか? ソースがあったので見てみたのですがC言語だった為詳しくわからなかったのですが、出力は「Console.WriteLine」ではなく「fputs」を使用して出力していました・・・これが原因なのでしょうか? どうにかして、出力を取得する方法はないものでしょうか? よろしくお願いします。

  • VisualBasic2005 外部アプリを最小化で起動する

    VisualBasic2005にてプログラムをしているのですが、 指定されたアクションをトリガにして、外部アプリを最小化で起動したいのですが、最小化されずに起動してしまいます。 外部アプリは、WEBブラウザ(safari)です。 以下に、処理部分を記載します。 Dim p As System.Diagnostics.Process = New System.Diagnostics.Process p.StartInfo.FileName = 'safariのパス' p.StartInfo.Arguments = '指定したURL' p.StartInfo.UseShellExecute = False p.StartInfo.RedirectStandardOutput = True p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized p.StartInfo.CreateNoWindow = True p.Start() 上記で実行すると、指定したURLでSafariが起動するのですが、 最小化で起動しません。 通常のウィンドウサイズで起動します。 どなたか、アドバイスをお願いします。

  • VB.NETでDOSコマンドの複数実行

    VB.NETでバッチファイルを使わずにDOSコマンドの複数実行をしたいのですが、 試しに Dim results As String 'ComSpecのパスを取得する psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec") '出力を読み取れるようにする psi.RedirectStandardInput = False psi.RedirectStandardOutput = True psi.UseShellExecute = False 'ウィンドウを表示しないようにする psi.CreateNoWindow = True 'コマンドラインを指定("/c"は実行後閉じるために必要) 'psi.Arguments = "/c " & asCmd & " /w" psi.Arguments = "/c " & "CD C:\" & " /w" '起動 p = System.Diagnostics.Process.Start(psi) '出力を読み取る results = p.StandardOutput.ReadToEnd '出力された結果を表示 Console.WriteLine(results) psi.Arguments = "/c " & "DIR" & " /w" '起動 p = System.Diagnostics.Process.Start(psi) '出力を読み取る results = p.StandardOutput.ReadToEnd '出力された結果を表示 Console.WriteLine(results) 'WaitForExitはReadToEndの後である必要がある '(親プロセス、子プロセスでブロック防止のため) p.WaitForExit() というプログラムを作成したのですが、DIRは実行されるのですが、 Cドライブに移動ができません。   何が悪いのでしょうか? 実現できる方法があればご教授ください。

  • 【VB.NET】コマンドプロンプトの操作について

     今晩は、質問させていただきます。どうぞよろしくお願いいたします。  環境: VB2008 Express Edition + Win7(もしくはVistaもしくはXP)  でございます。  VBからコマンドプロンプト(あまり使い方を存じません)を操作できているかどうか テストする為に、下記のように操作させてみましたがうまくいきません。。   ・Debugフォルダにコマンドプロンプトを起動    →コマンドプロンプトの内容表示(←成功)   ・Debugフォルダにコマンドプロンプトを起動    →「cd ../ 」    →コマンドプロンプトの内容表示(←何故か何も表示されません。)  http://soudan1.biglobe.ne.jp/qa5873147.html を参考にさせていただいて、コーディングいたしました↓   Dim psi As New System.Diagnostics.ProcessStartInfo()   psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec")   psi.RedirectStandardInput = False '出力を読み取れるようにする   psi.RedirectStandardOutput = True   psi.UseShellExecute = False   psi.CreateNoWindow = True 'ウィンドウを表示しないようにする    'コマンドラインを指定   psi.Arguments = "/c cd ../"  '←ここです。   Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(psi) '起動   Threading.Thread.Sleep(1000)   Do     results = p.StandardOutput.ReadLine     temp = temp & results     Application.DoEvents()     cnt = cnt + 1   Loop Until cnt = 1000   p.WaitForExit()   MsgBox(temp)  最後のMsgBoxに何も文字が表示されません。。。  コード中の「ここです」の行をコメントアウトいたしますと、最後のMsgBoxに 「Microsoft Windows XP ~D:\~bin\Debug>」 とフォルダ名が表示できます。  psi.Arguments = "/c cd ../" がちゃんと送れていないのでございましょうか??  色々と試行錯誤しておりますが、うまくいきません。 試しにpsi.CreateNoWindow = False などとしてみても一瞬で画面が消えてしまうため うまくバグ取りの打開策が見いだせておりません。  もしお詳しい方がいらっしゃいましたら是非ともアドバイスいただけないでしょうか。 どうぞよろしくお願いいたします。

  • Processで"<"の使用方法

    VC++2005の外部ファイルの実行で質問です。 バッチ(.bat)ファイルやコマンドプロンプトで実行する際に、 test.exe command < text.txt のように実行する実行ファイルを Processで実行するにはどうしたらいいのでしょうか? 現在、他の引数と同様に、 Process^ process1 = nullptr; ProcessStartInfo^ startInfo = gcnew ProcessStartInfo("test.exe"); startInfo->WindowStyle = ProcessWindowStyle::Normal; startInfo->Arguments = "command < text.txt"; process1 = Process::Start( startInfo ); process1->WaitForExit(); のような書き方をしてるのですが、正しく実行されません。 何か別の方法があるのでしょうか? C++はそんなに詳しくないですので、初心者に教えてように説明して頂けると助かります。 よろしくお願いします。

  • Query sessionを実行させるには?

    お世話になります。   DOSコマンドの"QUERY SESSION"で得たセッション情報を元に、 処理を行いたいと考えております。   そこでVB2010にて下記のプログラムを試したのですが、肝心の"QUERY SESSION"が   『操作可能なプログラム(中略)として認識されていません。』として実行されません。   ---------------------------------------------------------         '--Processオブジェクトを作成         Dim pr As New System.Diagnostics.Process         pr.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec")         p.StartInfo.UseShellExecute = False         p.StartInfo.RedirectStandardOutput = True         p.StartInfo.RedirectStandardInput = False           'コマンドラインを指定         pr.StartInfo.Arguments = "/c QUERY SESSION"  '<--------問題個所?           pr.Start()           '出力を読み取る         Dim results As String = pr.StandardOutput.ReadToEnd()           pr.WaitForExit()         pr.Close()   --------------------------------------------------------- 上記のコマンドラインの部分を、         pr.StartInfo.Arguments = "/c ipconfig" など他のDOSコマンドに変えると正常に動作するのですが、   例えば下記の様に別表現でQuery sessionを指定しても同様のエラーが返されるばかりです。         pr.StartInfo.Arguments = "C:\windows\System32\qwinsta.exe"   何が原因となっているのかも分からず困っております。   どうか、お知恵をお貸しください。宜しくお願い致します。

  • VB.NETでのDOSコマンドを実行について

    VB.NETでのDOSコマンドを実行について いつも大変お世話になっています。 VB.NET上でバイナリデータを DOSコマンド「copy」で結合させたいのですが うまくいきません。ご助言ください。 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 'コマンドラインを指定("/c"は実行後閉じるために必要) psi.Arguments = _ "/c copy /b /y "C:\Program Files\test\Data\out0001.bin"+"C:\Program Files\test\Data\out0002.bin" "C:\Program Files\test\Data\TEST.jpg"" '※コマンドの前後のダブルクォーテーションを省き、コマンドプロンプトで ' 直接実行した場合は成功しました。 '起動 Dim p As System.Diagnostics.Process=_ System.Diagnostics.Process.Start(psi) '出力を読み取る results = p.StandardOutput.ReadToEnd '出力された結果を表示 Console.WriteLine(results) 'WaitForExitはReadToEndの後である必要がある '(親プロセス、子プロセスでブロック防止のため) p.WaitForExit()