我想从Windows窗体加载事件运行控制台应用程序(例如app.exe)。 我试过System.Diagnostics.Process.Start(),但在打开app.exe之后,它会立即关闭它。
有什么方法可以运行app.exe并让它保持打开状态?
答案 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)
给定主/从应用程序设置时,您遇到两个问题之一:
对于第一个问题,您需要等待/阻止该过程完成(即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文件。