我创建了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代码。即使我的文档在打印机队列中,它也会执行(这里//某些东西)。
打印完成后还有其他通知方法吗?
答案 0 :(得分:6)
您的代码等待cmd.exe
完成,其(可能)在作为子进程启动pdfprint.exe
后立即终止。我建议你
pdfprint.exe
(为什么还要在这里使用Windows命令行?)但是,只有pdfprint.exe
实际等待计划的打印作业完成时,这两种方法才有效。我不知道这个工具,所以我不知道它是否表现得那么好。如果没有,则必须访问打印队列,不建议(正如Hans在评论中指出的那样)。
答案 1 :(得分:0)
这是你可能不得不采取的If-Everything-Else-Fails方法(如果pdfprint.exe不等到终止完成)。这很难看,但它会起作用:
就像我说的那样,它并不漂亮(你不应该使用它,除非你没有追索权)......但是它完成了工作。我必须使用这种方法来处理通过网络复制的传入文件(你需要在文件进入时处理它们,但你需要知道文件在被触摸之前已经完成复制,因为PDF会锁定一旦打开它们,然后文件复制将失败。)
答案 2 :(得分:0)
你试过这个吗?
procStartInfo.LoadUserProfile = true;