• ベストアンサー

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++はそんなに詳しくないですので、初心者に教えてように説明して頂けると助かります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

cmd.exe に /c test.exe command < text.txt を引数に実行させて見ましょう ProcessStartInfo^ startInfo = gcnew ProcessStartInfo("cmd.exe"); startInfo->WindowStyle = ProcessWindowStyle::Normal; startInfo->Arguments = "/c test.exe command < text.txt"; process1 = Process::Start( startInfo ); process1->WaitForExit(); といった具合で

kamatarou9
質問者

お礼

おおっ、すげーっ!動きました。 これはなんでも実行できそうで何にでも応用が利きそうですね。 cmd.exeを起動してって発想は浮かびませんでした。 非常に感謝です。ありがとうございました。

その他の回答 (1)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

「リダイレクト」と言います。おぼえておきましょう。 入力リダイレクトについてのサンプルコードが以下にあります。 http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.standardinput(VS.80).aspx これはアプリケーションでの入力をProcessで起動したsort.exeに流していますが、これを応用してファイルの中身をプロセス側に流すようなコードを書けばいいはずです。

kamatarou9
質問者

お礼

>「リダイレクト」と言います。おぼえておきましょう。 ありがとうございます。 読み方がわからなくて検索もままならない状態でした。 勉強になりました。

関連するQ&A

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

    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

  • C#でIISでPDFを印刷する方法

    VisualStudioでC#/ASP.netでPDFファイルをサイレント印刷するプログラムを実装しています。 「VisualStudio開発サーバーを使用する」の状態だと、 問題なく動作するのですが 「IIS Webサーバーの仕様」にすると 下記コードが全く反応しなくなります。 プリンタのプロパティ(セキュリティ)には 「Network Service」の「実行権限」を追加しています。 コードは、以下です。原因に何か心当たりのある方は、ご教授下さい。 Process printProcess = new Process(); string filePath = null; try { filePath = "C:\\PDFPRINT\\Output\\out.pdf"; printProcess.StartInfo.FileName = "C:\\Program Files (x86)\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe"; printProcess.StartInfo.Verb = "open"; printProcess.StartInfo.Arguments = " /h /t " + filePath + " EPSON PX-404A"; printProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; printProcess.Start(); printProcess.WaitForExit(1500); } catch { throw; } finally { if (!printProcess.HasExited) { printProcess.Kill(); printProcess.Dispose(); } }

  • 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 よろしくお願いいたします。

  • 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"   何が原因となっているのかも分からず困っております。   どうか、お知恵をお貸しください。宜しくお願い致します。

  • Processクラスが正常に動作しません。

    VisualStudio .NET2003でProcessクラスを利用してPDFファイルを自動的に印刷するプログラムを作っていますが、正常に動作しなくて困っています。タスクマネージャーを確認してみると、Adobe Readerのプロセスが実行されていることが分かったのですが、印刷処理は実行されないままになっています。 下記にコードを記載しますのでアドバイスよろしくお願いします。 Process myProcess = new Process(); myProcess.StartInfo.FileName = ”MyFile.pdf"; myProcess.StartInfo.Verb = "Print"; myProcess.StartInfo.CreateNoWindow = true; myProcess.Start();

  • 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が起動するのですが、 最小化で起動しません。 通常のウィンドウサイズで起動します。 どなたか、アドバイスをお願いします。

  • C#でのbatファイル実行結果取得

    既存のbatファイルが存在し、C#プログラムより、実行結果コ-ドを取得したいのですが、どうやっても「0」が帰ってきましまい、悩んでいます。 よいアドバイス&指摘を下さい。 <batファイル>  @echo off  set RET_CODE=%1  echo %RET_CODE%  exit /b %RET_CODE% <C#プログラム>  ProcessStartInfo psInfo = new ProcessStartInfo();  psInfo.FileName = @"D:/app/Send.bat";  psInfo.Arguments = "45";  psInfo.CreateNoWindow = true;  psInfo.UseShellExecute = false;  psInfo.RedirectStandardOutput = true;  Process ps= Process.Start(psInfo);  string st = ps.StandardOutput.ReadToEnd(); ← 何も出ない?  ps.WaitForExit();  string rt = ps.ExitCode.ToString(); ← 必ず「0」が返却?

  • [C#]実行中プロセスのパスを調べる方法について

    いつもお世話になっております。 現在実行中のプロセスの中から、特定のアプリのexeファイルのpathを表示させる方法が分からず苦戦しております。 言語はC#になります。 以下のコードでテキストボックスに、C#でコンパイルしたプログラムのpathは分かったのですが、私が表示させたいのは、コンパイルしたプログラムのpathではなく、現在実行中のプロセスの中のあるアプリのexeファイルのpathになります。 string appPath= System.Windows.Forms.Application.ExecutablePath; textBox1.Text = appPath; 良いお知恵がございましたらお力添えいただきたく、宜しくお願いいたします。

  • 常駐し他のプロセスの起動を取得する方法

    test.exeというプログラムを作ります。 実行すると特定のプロセスの起動を待ちます。 特定のプロセスをnotepad.exeとします。 メモ帳(notepad.exe)が起動されたらtest.exeは何かします。 例えばMessageBox()とかで何か表示します。 どうやればいいのでしょうか? ・特定のプロセスが起動するまで待つ ・起動を検知する というところを教えてください。 VC++です。MFC,ATLなどは使いません。 特にウインドウなどはいらないので数行でできてしまうのであれば winmain()からお願いします。

  • Process.Startの戻り値を後で取得

    お世話になっております。 作業マシン:WINDOWS Server2008 (仮想) 開発ツール:VWD2010(VB) 使用DB:SQLServer2008R2 にて、Webアプリを開発しております。 ASP.NET開発の経験はおおよそ1ヶ月半程です。 現在、Process.Startで外部exeを実行しております。 この外部実行ファイルは3分くらい掛かる処理で、 WaitForExit() で結果を待たずに 次の画面(待機用画面)に遷移しています。 処理が終了したら、待機画面から結果画面へと遷移させたいのですが、 プロセスの完了と、その結果(戻り値)を、 Process.Startをコールした画面以外で受け取る事が出来るのでしょうか。 WaitForExitを使用するならば、 素直に終了を待ち、終了後にExitCodeを取得、 Ret = Process.Start() で戻り値も取得できましたが… WaitForExit( ) をしない場合、どのようにして取得できるのでしょうか。 http://dobon.net/vb/dotnet/process/openfile.html こちら等、Process.Start 非同期 などのキーワードで出てくるのは Processを実行した同画面内での待機のケースが多く、 今自分が遭遇しているケースに応用するには どうにも自分の理解が追いつけず質問いたします。 実行する画面でプロセスIDを取得し、セッションに持たせ、 終了を判断したい画面でプロセスIDを元にチェックをする… と言うことも考えてみましたが、プロセスIDを頼りに、 終了したプロセスの戻り値を突き止める方法も見つからず (発想自体が間違っているかもしれません) 皆様のお力を貸して頂けないでしょうか。何卒よろしくお願いします。