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

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

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

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

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

试着这样做:

  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(); 

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

希望这可以帮助。 祝好运。

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

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

app.exe可以以Console.ReadLine()结束,假设它也是一个C#应用程序,您可以在其中控制源代码。

鉴于您的主/从应用程序设置,您有两个问题之一:

  1. 您的主应用程序正在打开,显示一个表单,该表单运行从属应用程序并立即关闭,即使从属应用程序仍在运行。
  2. 您的主应用程序正在打开,显示一个表单,该表单运行立即关闭的从属应用程序。

对于第一个问题,您需要等待/阻止进程完成(即Process.WaitForExit()

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

如果你可以控制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 } 

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

 app.exe pause 

现在让你的表单指向该bat文件。