如何从Windows窗体执行控制台应用程序?

时间:2010-04-07 14:34:16

标签: c# winforms console-application

我想从Windows窗体加载事件运行控制台应用程序(例如app.exe)。 我试过System.Diagnostics.Process.Start(),但在打开app.exe之后,它会立即关闭它。

有什么方法可以运行app.exe并让它保持打开状态?

8 个答案:

答案 0 :(得分:12)

如果您只是希望控制台窗口保持打开状态,可以使用以下命令运行它:

System.Diagnostics.Process.Start( @"cmd.exe", @"/k c:\path\my.exe" );

答案 1 :(得分:3)

尝试这样做:

        string cmdexePath = @"C:\Windows\System32\cmd.exe";
        //notice the quotes around the below string...
        string myApplication = "\"C:\\Windows\\System32\\ftp.exe\"";
        //the /K keeps the CMD window open - even if your windows app closes
        string cmdArguments = String.Format("/K {0}", myApplication);
        ProcessStartInfo psi = new ProcessStartInfo(cmdexePath, cmdArguments);
        Process p = new Process();
        p.StartInfo = psi;
        p.Start();

我认为这会让你得到你想要的行为。假设您不只是尝试在命令窗口中查看输出。如果您只想查看输出,那么您已经有几个版本的答案。这就是您如何运行应用程序并保持控制台打开的方式。

希望这会有所帮助。祝你好运。

答案 2 :(得分:2)

如果app.exe什么都不做,或者快速完成它的工作(即只是打印“Hello World”并返回),它将按你刚才解释的方式运行。如果你希望app.exe在工作完成后保持打开状态,请在控制台应用程序中输入一些完成消息,然后是Console.ReadKey();

答案 3 :(得分:1)

如果您可以更改app.exe的代码,只需添加Console.In.Read()即可让其等待按键。

答案 4 :(得分:1)

app.exe可以以Console.ReadLine()结尾,假设它也是您控制源代码的C#应用​​程序。

答案 5 :(得分:1)

给定主/从应用程序设置时,您遇到两个问题之一:

  1. 您的主应用程序正在打开,显示一个表单,该表单运行从属应用程序并立即关闭,即使从属应用程序仍在运行。
  2. 您的主应用程序正在打开,显示一个表单,该表单运行立即关闭的从属应用程序。
  3. 对于第一个问题,您需要等待/阻止该过程完成(即Process.WaitForExit()

    对于第二个问题,它听起来像奴隶应用程序已完成它所需要的(或抛出异常)并立即关闭。尝试从命令提示符使用相同的参数运行它并检查输出。

答案 6 :(得分:1)

如果你可以控制app.exe,你应该知道它是如何运作的,所以我会假设你无法控制它的内部工作。在这种情况下,您可以尝试传递帮助标志,该标志可能会或可能不会提供有关如何调用app.exe的更多信息。尝试这样的事情:

private startApp()
{
    string command = " -h"; //common help flag for console apps
    System.Diagnostics.Process pRun;
    pRun = new System.Diagnostics.Process();
    pRun.EnableRaisingEvents = true;
    pRun.Exited += new EventHandler(pRun_Exited);
    pRun.StartInfo.FileName = "app.exe";
    pRun.StartInfo.Arguments = command;
    pRun.StartInfo.WindowStyle =  System.Diagnostics.ProcessWindowStyle.Normal

    pRun.Start();
    pRun.WaitForExit();
}
private void  pRun_Exited(object sender, EventArgs e)
{
    //Do Something Here
}

答案 7 :(得分:0)

创建一个新的文本文件,将其命名为app.bat并将其放在那里:

app.exe
pause

现在让你的表格指向那个bat文件。