我有一个通过过程运行的批处理文件,但是当该批处理文件运行完毕并关闭时,窗体也会关闭。我如何防止关闭表单的过程。这是代码。
Process support = new Process();
support.StartInfo.FileName = @"C:\Support\Support.bat";
support.EnableRaisingEvents = true;
support.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
support.StartInfo.CreateNoWindow = true;
support.StartInfo.UseShellExecute = false;
support.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
support.StartInfo.RedirectStandardOutput = true;
support.Start();
support.BeginOutputReadLine();
这是将批处理文件的输出写入richTextbox的输出处理程序
private void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
string line;
line = (outLine.Data.ToString());
txtStatus.AppendText(line + "\n");
}
批处理文件完成后自动关闭,程序也关闭,并且从不执行其余代码。
答案 0 :(得分:0)
您可以使用
Console.ReadLine();
或
Console.ReadKey();
ReadLine()等待按下Enter键,而ReadKey()等待按下任何键(除了修饰键-Shift,Control,Alt,Command,Option ..等),
如果这纯粹是为了从VS进行测试,那么您可以运行应用程序而无需使用Ctrl + F5进行调试
答案 1 :(得分:0)
进程将自行打开一个窗口,一旦.bat文件退出,将退出并关闭主窗口。并不是您的代码有问题,默认情况下,如果您在资源管理器中双击.bat文件,它就是.bat文件的运行方式(cmd将打开,直到.bat完成,然后再次关闭)
您提到您尝试过“ Process.WaitForExit()”,但我想指出的是,在您的上下文中,它应该是“ support.WaitForExit()”,就像您的“ dt.WaitForExit()”(代码您发布的帖子现在已删除)
如果这不起作用,请在support.bat文件的新行中添加“ PAUSE”。这也将阻止窗口在按下键之前关闭。
如果您无权编辑support.bat文件,则只需读取文件内容并将其临时保存在某个位置,然后运行它...或添加它即可:
using (StreamWriter w = File.AppendText("support.bat"))
{
w.WriteLine("PAUSE");
}
上面显然是一个示例,您需要在再次写入文件之前检查“ PAUSE”是否已经是最后一行。我也没有显示有关如何创建文件和保存文件的代码,您应该能够处理它:)