【发布时间】:2017-04-07 10:34:42
【问题描述】:
我创建了 Print spooler 应用程序来异步打印 pdf。
(应用程序使用veryPDF命令从网络打印机打印)
这是代码
var procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", " /c" + "E:\pdfprint_cmd\pdfprint.exe -$ 388444444448350FA394 E:\PrintSpoolerApplication\PrintSpoolerApplication\bin\Debug\45940.pdf");
procStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
procStartInfo.Verb = "runas";
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
var proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
proc.WaitForExit();
// Some stuff
但它没有等待 WaitForExit 代码。即使我的文档在打印机队列中,它也确实执行了(这里 //Some stuff)。
有没有其他方法可以在打印完成时发出通知?
【问题讨论】:
-
也知道如果你尝试手动打开一个控制台并执行你的命令,即使你执行的程序一直在运行,如果控制台立即给你一个提示,那么你的 WaitForExit 代码只会等待
cmd进程(控制台)退出,而不是那个其他程序。 -
此外,您没有转义反斜杠,因此:
"E:\p...应该是@"E:\p...。 -
感谢@LasseV.Karlsen 的回复。但我没有收到任何错误,打印过程没有任何错误。
-
那么问题是你在等待控制台进程返回,而不是打印进程。
-
使用 start /wait 告诉 cmd.exe 在进程完成之前不要完成。或者根本不使用 cmd.exe,因为它没有做任何有用的事情。像这样的程序可能只是将打印作业转储到后台处理程序中,并且不会等待它被打印。您必须处理 System.Printing.PrintQueue,不推荐。
标签: c# .net printing process processstartinfo