如何从C#运行.exe

时间:2012-09-28 09:11:13

标签: c# wpf exe process.start

我正在用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#执行相同的命令。我见过不同的例子,但没有一个适合我。能否请您提供我可以解决上述问题的任何代码或链接?

5 个答案:

答案 0 :(得分:8)

这将有效,除非您提供的路径不正确:

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")

答案 1 :(得分: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,现在我已经更新了答案,合理地假设你想要得到什么。如果路径和可执行文件名称正确,请告诉我。

答案 2 :(得分:0)

您可以使用以下方法执行exe文件

System.Diagnostics.Process.Start(exePath + "LSAPP.exe");

答案 3 :(得分:0)

using (Process process = Process.Start(...))
    process.WaitForExit(); // You can wait for process to exit or go idle.

答案 4 :(得分:0)

您可以使用Process.Start()创建一个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