如何从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#应用程序,您可以在其中控制源代码。
鉴于您的主/从应用程序设置,您有两个问题之一:
- 您的主应用程序正在打开,显示一个表单,该表单运行从属应用程序并立即关闭,即使从属应用程序仍在运行。
- 您的主应用程序正在打开,显示一个表单,该表单运行立即关闭的从属应用程序。
对于第一个问题,您需要等待/阻止进程完成(即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文件。