【问题标题】:ProcessStartInfo WaitForExit TimeoutProcessStartInfo WaitForExit 超时
【发布时间】:2018-02-24 13:16:33
【问题描述】:

我需要用ProcessStartInfo打印一个pdf文件。

 string docInvoicePath = @"[Path]";
 string printername = "\"PRN-OFFICE\"";
 string driver = "\"Xerox Global Print Driver PS\""; 
 string port = "\"[IP]\"";

 ProcessStartInfo psInfo = new ProcessStartInfo
 {
     FileName = @"""C:\Program Files (x86)\Adobe\Reader 9.0\Reader\AcroRd32""",
     Arguments = String.Format("/s /o /h /t " + docInvoicePath + " " + printername + " " + driver + " " + port),
     Verb = "print",
     WindowStyle = ProcessWindowStyle.Hidden,
     CreateNoWindow = true,
     UseShellExecute = false                 
 };

 Process process = Process.Start(psInfo);
 process.WaitForExit(6000);
 if (process.HasExited == false)
 {
     process.Kill();
 }
 process.Close();

filenamearguments 是正确的,它们在粘贴到 cmd 时有效。 代码可以正常工作,但是在Process.Start 之后,当涉及到WaitForExit 时,程序没有完成。我收到超时错误:

System.Threading.ThreadAbortException:线程被中止。 在 System.Threading.WaitHandle.WaitOneNative(SafeHandle waitableSafeHandle,UInt32 毫秒超时,布尔值 hasThreadAffinity,布尔退出上下文) 在 System.Threading.WaitHandle.InternalWaitOne(SafeHandle waitableSafeHandle,Int64 毫秒超时,布尔值 hasThreadAffinity,布尔退出上下文) 在 System.Diagnostics.Process.WaitForExit(Int32 毫秒)...

我搜索并尝试了一些操作,例如设置 <httpRuntime executionTimeout="300"/> 并遇到 500 或类似 process.WaitForExit(6000); 及更高的代码,没有例外但没有打印。

是有错误还是我遗漏了什么?

编辑: 我在上面更改了我的代码块。现在代码在调试模式下工作,但发布时它仍然不会打印我的文档。我也尝试使用不同的用户。 在调试模式下,代码打印文档但在 kill 查询中运行。

ProcessStartInfo.Verbs 返回一个参数异常,但我不知道为什么。

【问题讨论】:

  • 你在阻塞主线程吗?
  • 我不这么认为,我该如何检查?
  • 我只是想知道为什么它应该被中止,如果在 ASP.NET 中我不确定如果你阻塞主线程这么久会发生什么。在普通的 .net/WinForms 应用程序中,您的 GUI 将无响应。但是在 ASP 上——我真的不知道是否有机制可以中止长时间运行的东西。您是否必须出于某种原因等待退出?如果不只是省略它。如果是,请尝试在工作线程上执行所有这些操作,看看是否也发生了中止。
  • 没有 WaitForExit 它完美地运行代码但没有任何反应/被打印
  • 嗯,对不起。我真的不熟悉 ASP。我这边的任何建议都只适用于“普通”的 .net 应用程序。不过,我怀疑你必须生成一个后台任务。

标签: c# asp.net process


【解决方案1】:

经过大量尝试、测试和搜索,我确信我的代码可以正常工作。 所以我仍然不知道为什么我的代码停止工作。 但是从服务器上的 Adob​​e Reader 9.0 更改为 7.0 现在可以正常工作了。

当我在本地使用 Adob​​e Reader 9.0 进行调试时,它也可以工作,所以我认为网络服务器上可能有更新。我还没有验证。

【讨论】:

    猜你喜欢
    • 2010-09-13
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    相关资源
    最近更新 更多