web-dev-qa-db-ja.com

C#からdosコマンドラインを実行していますか?

コマンドラインプロンプトからこのコマンドを実行しようとしています。

"D:\\fiji\\fiji.exe -macro D:\\fiji\\macros\\FFTBatch.ijm --headless"

コマンドラインコンソールに入力すると、完全に機能します。

しかし、C#アプリケーションから機能させようとすると失敗しました。私は以下を試しましたが、上記のコマンドはどういうわけか実行されなかったようです:

string fijiCmdText = "D:\\fiji\\fiji.exe -macro D:\\fiji\\macros\\FFTBatch.ijm --headless";
System.Diagnostics.Process.Start("cmd.exe", fijiCmdText);

誰かがそれを動作するように変更する方法を知っていますか?ありがとう。

12
Nick X Tsui

問題は、Chris Haasが指摘したように解決されました。他の回答が機能しないという意味ではなく、問題が少なくとも1つの方法で解決できることを意味します。

ここでは、単に"/C "をコードに追加するだけで機能します。

機能しなかったオリジナル:

string fijiCmdText = "D:\\fiji\\fiji.exe -macro D:\\fiji\\macros\\FFTBatch.ijm --headless";
System.Diagnostics.Process.Start("cmd.exe", fijiCmdText)

;

動作する現在のコード:

string fijiCmdText = "/C D:\\fiji\\fiji.exe -macro D:\\fiji\\macros\\FFTBatch.ijm --headless";
System.Diagnostics.Process.Start("cmd.exe", fijiCmdText);

これがChris Haasが述べた reference です。 EDIT3を参照

12
Nick X Tsui

Cmd.exeを実行する必要はありません。ProcessStartInfoオブジェクトを作成し、パラメーターを指定してコマンドを渡すだけです。このような:

System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo("your command", "parameters");

これを行う方法を示す例を次に示します。

System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo("tree.com", "/f /a");
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = info;
p.Start();
p.WaitForExit();

したがって、あなたの場合、これはあなたのコマンドです:"D:\\fiji\\fiji.exe"そしてこれはあなたのコマンドパラメータまたは引数です:@"-macro D:\\fiji\\macros\\FFTBatch.ijm --headless"

9
Arin Ghazarian

これを試して:

ProcessStartInfo info = new ProcessStartInfo(@"D:\fiji\fiji.exe",@"-macro D:\fiji\macros\FFTBatch.ijm --headless");
Process process = new Process();
process.StartInfo = info;
process.Start();
4