C#で実行形式ファイル(*.exe)を起動する方法

このQ&Aのポイント
  • C#で実行形式ファイル(*.exe)を起動する方法について教えてください。
  • コマンドプロンプトから実行する場合はうまくいくのに、C#で実行するとうまくいかない問題が発生しています。
  • 実行するとコマンドプロンプトのウィンドウが表示され2秒後に消えますが、作成されるべきファイルが作成されていません。
回答を見る
  • ベストアンサー

C#で実行形式ファイル(*.exe)を起動したい

C#で実行形式ファイル(*.exe)を起動したいのですが、以下のようにしました。 しかし、うまくいきません。なぜでしょうか? コマンドプロンプトから実行すればまったく同じ引数でもうまくいきます。 したがって引数の書式に問題があるとは思えません。 これを実行するとコマンドプロンプトのウィンドウが表示され2秒後に消えます。 しかし、作成されているべきふたつのファイル(rangeとtrain.scale)が作成されていません。 急いでいます。 よろしくお願いいたします。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.Threading; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { try{ Process myProcess ; myProcess = Process.Start(@"C:\Users\youzan\svm-scale.exe", @"-l -1 -u 1 -s           range train.txt > train.scale"); Thread.Sleep(2000); myProcess.CloseMainWindow() ; myProcess.Close(); } catch(Exception e) { Console.WriteLine("The following exception was raised: "); Console.WriteLine(e.Message); } } } }

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

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

> train.scale そもそも、これはコマンドライン引数ではありません。 C#側で標準出力をうけるのであれば、 http://www.atmarkit.co.jp/fdotnet/dotnettips/657redirectstdout/redirectstdout.html

youzan1231
質問者

お礼

わかりました。ありがとうございます。 結果として、>train.scale の部分を削除したら、標準出力(コンソール)に処理結果が 正しく表示されるようになりました。 コンソールではなくファイルに出力するためにリダイレクト処理を加えて成功しました。 ありがとうございました。

その他の回答 (1)

  • utun01
  • ベストアンサー率40% (110/270)
回答No.1

恐らく求められている答えではありませんが、 「Process.Start」で「cmd /c "C:\Users\youzan\svm-scale.exe -l -1 -u 1 -s range train.txt > train.scale"」 みたいに実行すれば良いのではないでしょうか。 ちなみに試してはいませんので、動くのかはわかりません。 要は、コマンドプロンプトからなら動くということでしたので、 プログラム上でもコマンドプロンプトを介してみては、という提案です。

youzan1231
質問者

お礼

ありがとうございます。 結果的には、No.2のtodo36さんのご指摘にしたがって処理したら うまくいきました。

関連するQ&A

  • c#による実行ファイルの作成方法

    using System; class test { public static int Main(string[] args) { int x = args.Length; for (int i = 0; i < x; i++) Console.WriteLine("{0}, {1}", i, args[i]); return 0; } } 上記のプログラムをvisual c# 2010 expressで ビルドした後、コマンドプロンプトから test.exe aaa bbb ccc と入力し引数を渡して呼び出そうとしたのですが、 「'test.exe' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 と表示されうまくいきませんでした。 test.csを保存したうえで今度はフルパスでの入力や、 csc test.csなども試してみましたが、ダメでした。 参考書には「ビルドをすることでexeの実行ファイルが作成される」と書かれているのですが、 PC内にtest.exeは見当たりません。 コマンドライン引数が渡せないのは実行ファイルが生成されていないためだと思うのですが、 まだ始めたばかりで解決の糸口もわからない状況です。 何かヒントになるようなことでもいいので教えていただけると助かります。

  • C#についての質問です

    Microsoft Visual C# 2010 Express をつかって using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Console { class Program { static void Main(string[] args) { Console.WriteLine("皆様、はじめまして"); } } } と入力して.csで保存したのですが、コマンドプロンプトで 'csc' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 とでてコンパイルできません。対応を教えてください。

  • C#でEXEを閉じるとエラー

    myProcess.StartInfo.FileName = @"C:\Program Files\Sample\Sample(1)\Sample.exe"; myProcess1.Start(); myProcess.StartInfo.FileName = @"C:\Program Files\Sample\Sample(2)\Sample.exe"; myProcess2.Start(); 上記として、開いたウィンドウを閉じるボタンで終了した際にエラーとなります。 プロセスを一つにすると、エラーが出ないため、同一名のプロセスが原因しているのかと思うのですが、処理の仕方がわかりません。 myProcess1.Exited += new EventHandler(myProcess_Exited); myProcess2.Exited += new EventHandler(myProcess_Exited); private void myProcess_Exited(object sender, System.EventArgs e) { Process exitProcess = (Process)sender; exitProcess.Dispose(); } としてもエラーになりました。 今後、Sample.exeは6つ開きたいのですが、2つでつまづいています。 対処法をご存知の方がおられましたら、アドバイスよろしくお願いいたします。

  • Visual C++ 2008 Express Editionの”hello worldのプログラム”

    CUIのプロジェクト作成で自動的に // cui_test.cpp : メイン プロジェクト ファイルです。 #include "stdafx.h" using namespace System; int main(array<System::String ^> ^args) { Console::WriteLine(L"Hello World"); return 0; } このようなプログラミングができて一つ疑問ができたのですが、 ”Console::WriteLine(L"Hello World");” System::Console:: のメソッドの中にある ”WriteLine(L"Hello World");” なぜ”(L"Hello World")”という引数の書き方をしているのですか? ”L”と”"Hello World"”というのは別々の引数として登録しているのでしょうか? オブジェクトブラウザでSystem::Console:: WriteLineを検索したのですが、18種類あってどれを使っているのかわかりません。 教えてくださいよろしくお願いいたします。

  • c# 他プロセス起動 リダイレクト(入力) バイナリファイルの場合

    現在、c#で他プロセスを起動させるプログラムを組んでいるのですが、リダイレクトでつまづいています。 (コンパイルが出来ない->どう記述すれば良いのか分からない。) ファイルストリームのReadはデータをByteの配列に格納しますが、リダイレクト入力のwriteはcharの配列を引数としているみたいで、どう記述すれば良いのか分かりません。 記述方法または参考URLを教えていただけないでしょうか? --source--  System.IO.Stream retstream = new FileStream(wkPath, FileMode.Open, FileAccess.Read, FileShare.Read);  System.Diagnostics.Process myProcess = new System.Diagnostics.Process();  myProcess.StartInfo.FileName = "C:\\Program Files\\proc\\process.exe";  myProcess.StartInfo.UseShellExecute = false;  myProcess.StartInfo.RedirectStandardInput = true;  myProcess.StartInfo.RedirectStandardOutput = true;  if (strmInput.Length > 0) {   int num = 0;   byte[] bufWk = new byte[65536];   while (true) {    num = strmInput.Read(bufWk, 0, bufWk.Length);    if (num == 0) {     break;    }    myProcess.StandardInput.Write(bufWk, 0, num); //←コンパイルエラー   }  } --エラー内容-- System.IO.TextWriter.Write(char[], int, int)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。 引数 '1': 'byte[]' から 'char[]' に変換できません。

  • クライアント上のC++でサーバーとソケット送信

    クライアント(Windows7)上でC++を使って、サーバー側(Windows)に対してデータを送りたいです (ソケット通信?)。 サーバ受信側はC#を使ったプログラムで以下のような感じで考えてます。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.IO; namespace ConsoleApplication1 {   class Program   {     static void Main(string[] args)     {       int port = 2222;       System.Net.IPAddress ip = IPAddress.Parse("127.0.0.1");       System.Net.Sockets.TcpListener server = new TcpListener(ip, port);       Console.WriteLine("Enter押してください");       ConsoleKeyInfo info = Console.ReadKey();       if (info.Key == ConsoleKey.Enter)       {         Console.WriteLine("サーバー待機中");         server.Start();         TcpClient client = server.AcceptTcpClient();         NetworkStream ns = client.GetStream();         StreamWriter sw = new StreamWriter(ns);         Console.WriteLine(sw);       }     }   } } C++のことがよくわかってないので、送信側でC++を使ってどのように 送信すればいいのかわかりません。 送信するデータはINT型で、1秒間に1回、繰り返し送ります。 よろしくお願いします。

  • exeファイルが実行できません

    フリーソフトなどインターネットからダウンロードしたexeファイルをダブルクリックで実行すると、コマンドプロンプトの画面のようなものが一瞬開いてすぐに閉じてしまいます。 インストール設定の画面などはでてきません。 なにか環境がおかしいのでしょうか? よろしくお願いします。

  • あるexeファイルを実行するexeファイルを作りたい

    いつもお世話になってます。 前回、http://okwave.jp/qa4949997.html にて質問させていただきました。最終的にはこのページのようなことをしたいのですが、とりあえずRubyファイルをコンパイルし、exeファイルに変換することはできました。 そこで次はそのexeファイルを実行させるC/C++コードが必要になってくるのですが、C/C++はあまり詳しくないのでよくわかりません。 ちなみにコマンド引数も使うexeファイルです。 よろしくお願いします。

  • VC++から引数付きexeファイルの実行

    タイトルの通り、VC++から外部ファイルを実行したいのですがどのような関数を使えばよいのでしょうか? exeファイルを実行中は親プロセスであるVCのプログラムの方を止めておきたいのです。 出来ればexeファイルは引数付きで実行したいと思いますので、よろしくお願いします。 開発環境はVisualStudio2005です。

  • C++ ファイル列挙について

    以下のコードで指定のファイルを検索し、フルパスで配列に格納しています。 このとき、ファイル名のみ(パスと拡張子無し)で格納する方法はありますでしょうか。 どうかよろしくお願いします。 // enum_files.cpp // compile with: /clr using namespace System; using namespace System::IO; int main() { String^ folder = "C:\\"; array<String^>^ dir = Directory::GetDirectories( folder ); Console::WriteLine("--== Directories inside '{0}' ==--", folder); for (int i=0; i<dir->Length; i++) Console::WriteLine(dir[i]); array<String^>^ file = Directory::GetFiles( folder ); Console::WriteLine("--== Files inside '{0}' ==--", folder); for (int i=0; i<file->Length; i++) Console::WriteLine(file[i]); return 0; }