2

C# で wpf アプリケーションを開発しています。アプリケーションで grib ファイルを使用しています。このグリブファイルの内容をcsvファイルに変換したいです。コマンドプロンプトから、これを簡単に行うことができます。コマンド プロンプトでこれを行うには、degrib.exe のフォルダーの場所、つまり c:\ndfd\degrib\bin に移動する必要があります。他のパス コマンドは実行されません。次のコマンドを使用しています

C:\ndfd\degrib\bin\degrib D:\Documents\Pacificwind.grb -C -msg 1 -Csv
C:\ndfd\degrib\bin\degrib D:\Documents\Pacificwind.grb -C -msg all -nMet -Csv

コマンドは正常に実行されます。C:\ndfd\degrib\bin フォルダーで、生成された csv ファイルを確認できます。C# から同じコマンドを実行する方法を教えてください。さまざまな例を見てきましたが、どれもうまくいきませんでした。上記の問題を解決できるコードまたはリンクを教えてください。

4

5 に答える 5

9

指定したパスが正しくない場合を除いて、これは機能します。

Process.Start(@"C:\ndfd\degrib\bin\degrib", 
              @"D:\Documents\Pacificwind.grb -C -msg 1 -Csv");

Process.Start(@"C:\ndfd\degrib\bin\degrib", 
              @"D:\Documents\Pacificwind.grb -C -msg all -nMet -Csv")
于 2012-09-28T09:14:54.440 に答える
2

ProcessStartInfoクラスを使用して、起動するアプリケーションの作業ディレクトリを設定できます。
例えば

        ProcessStartInfo pInfo = new ProcessStartInfo("degrib.exe");
        pInfo.WorkingDirectory = @"C:\ndfd\degrib\bin" 
        pInfo.Arguments = @"D:\Documents\Pacificwind.grb -C -msg 1 -Csv";    
        Process p = Process.Start(pInfo);

        // Are I assume that the second processing need to wait for the first to finish
        p.WaitForExit();

        // Start the second run.....
        pInfo = new ProcessStartInfo("degrib.exe");
        pInfo.WorkingDirectory = @"C:\ndfd\degrib\bin" 
        pInfo.Arguments = @"D:\Documents\Pacificwind.grb -C -msg all -nMet -Csv";    
        Process.Start(pInfo);

ProcessクラスとWaitForExitメソッドに関するドキュメントも確認してください

編集:私はそれが何であったかを本当に知りませんdegrib、今私はあなたが得ようとしているものの合理的な仮定への答えを更新しました。パスと実行可能ファイル名が正しいかどうか教えてください。

于 2012-09-28T09:14:12.717 に答える
0

次の方法でexeファイルを実行できます。

System.Diagnostics.Process.Start(exePath + "LSAPP.exe");
于 2012-09-28T09:15:54.490 に答える
0
using (Process process = Process.Start(...))
    process.WaitForExit(); // You can wait for process to exit or go idle.
于 2012-09-28T09:20:50.590 に答える
0

Process.Start()次のような Create an Process オブジェクトを使用できます。 process = new Process { StartInfo = startInfo }; ProcessStartInfo オブジェクトを作成します

startInfo = new ProcessStartInfo(pathToExecutable, arguments);
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = false;
startInfo.RedirectStandardOutput = true;
process = new Process { StartInfo = startInfo };

を使用して出力をキャッチします process.OutputDataReceived event

于 2012-09-28T09:21:19.070 に答える