执行bat文件后,命令行窗口出现问题。我想运行bat文件,没有显示cmd窗口,关闭它,然后打开我的PDF文件,这是使用我的程序和bat文件生成的。我的代码:
if (isset($perguntas) && is_array($perguntas)){
所以在我的情况下会发生什么:一切都按照应有的方式运行,但我的PDF是在我的bat文件执行之前显示的。如何让我的 Process p1 = new Process();
p1.StartInfo.FileName = @"C:\dir\batch.bat";
p1.StartInfo.Arguments = @"C: \dir\final.tex";
p1.StartInfo.UseShellExecute = false;
p1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p1.Start();
p1.WaitForExit(15*1000);
p1.Close();
Process.Start(@"C:\dir\final.pdf");
等待,直到我的bat文件完成这项工作?使用Process.Start(pdf)
时,我需要手动退出cmd窗口,我不想这样做。有什么想法吗?
感谢。
我的蝙蝠档案:
p1.WaitForExit()
答案 0 :(得分:1)
您正在寻找这个:
p1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
请注意,MSDN表示
要使用ProcessWindowStyle.Hidden,ProcessStartInfo.UseShellExecute属性必须为false。
你在那里,但以防万一...
ProcessStartInfo.CreateNoWindow是另一回事 - 这是关于您的流程窗口是否将托管新流程窗口。默认值为false,这是您想要的,因此不要将其设置为true。即删除
p1.StartInfo.CreateNoWindow = true;
来自您的代码。您确实希望新进程在自己的窗口中运行,但您希望它是一个隐藏的窗口。然后你只需要等待新进程的终止就完成了。
要等待,您可以使用WaitForExit。但是,我总是建议你不要无限期地等待,但总是考虑一个理智的限制 - 可能是30秒,1分钟,2分钟......取决于你的孩子过程的任务。如果它花了太长时间(子进程可能被窃听并且只是因为未知原因而挂起)那么就把它杀掉。
更新(使用WaitForExit):
以下内容将等待最多60秒以完成子进程:
if (p1.WaitForExit(60 * 1000))
{
// Child process finished, do whatever you want
}
else
{
// Child process failed to finish within 60 seconds, so we kill it.
// It is unlikely that there is a result you are expecting ...
p1.Kill();
}