2012-02-17 10 views
1

プロセスで実行しようとしているFortran実行可能ファイルがあります。 Fortran実行可能ファイルは、ユーザーからファイルを要求し、解決策を見つけるための操作を実行し、その後に複数の解決策がある場合、最適解を探したいかどうかをユーザーに尋ねます。私がここで提供しているコードは、GUIのように見えないので、入力アイドルを待つよう呼び出すと、常にクラッシュするようです。私はプロセスを使用することに新しいので、誰かが私を助けることができれば、それは高く評価されます。C#からFortran実行ファイルを呼び出す処理

ありがとうございました。

編集:結果をユーザーに提供するために、Fortran実行可能ファイルがテキストファイルを生成することに言及していません。私は、入力アイドルの待機を削除すると、もはやクラッシュするが、結果のテキストファイルは生成されなくなりました。実行ファイルが正しく実行されていませんか?

 Process exeProcess = new Process(); 
     exeProcess.StartInfo.FileName = @"...\marcus12.exe"; 
     exeProcess.StartInfo.UseShellExecute = false; 
     exeProcess.StartInfo.RedirectStandardError = true; 
     exeProcess.StartInfo.RedirectStandardInput = true; 
     exeProcess.StartInfo.RedirectStandardOutput = true; 
     exeProcess.Start(); 
     //exeProcess.WaitForInputIdle(); 
     exeProcess.StandardInput.WriteLine(Path.GetFileName(filePath)); 
     //exeProcess.WaitForInputIdle(); 
     exeProcess.StandardInput.WriteLine("Y"); 
     exeProcess.WaitForExit(); 
+0

あなたは全く待つ必要はありません。 – SLaks

+0

応答のおかげで、もはやクラッシュすることはなくなりましたが、実行ファイルは正しい出力を生成しません(editを参照)。 – BeingIan

+0

標準のエラーを読み、何が起こるか見る – SLaks

答えて

0

WaitForInputIdle()は、起動するプロセスがメッセージループを持つWindowsアプリケーションである場合に使用されます。あなたの場合、それは簡単なコンソールアプリケーションです。

そのために必要なものは2 WaitForInputIdleを(除外することである)コードから呼び出す:

Process exeProcess = new Process(); 
exeProcess.StartInfo.FileName = @"...\marcus12.exe"; 
exeProcess.StartInfo.UseShellExecute = false; 
exeProcess.StartInfo.RedirectStandardError = true; 
exeProcess.StartInfo.RedirectStandardInput = true; 
exeProcess.StartInfo.RedirectStandardOutput = true; 
exeProcess.Start(); 
exeProcess.StandardInput.WriteLine(Path.GetFileName(filePath)); 
exeProcess.StandardInput.WriteLine("Y"); 
exeProcess.WaitForExit(); 
0

ただ、彼らはあなたの場合には必要ありません、2つのexeProcess.WaitForInputIdle();行を削除します。

関連する問題