2

我正在用 C# 开发 wpf 应用程序。我在我的应用程序中使用 grib 文件。我想将此 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 回答