2017-09-15 99 views
1

我需要用ProcessStartInfo打印pdf文件。ProcessStartInfo WaitForExit超时

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: Thread was being aborted. at System.Threading.WaitHandle.WaitOneNative(SafeHandle waitableSafeHandle, UInt32 millisecondsTimeout, Boolean hasThreadAffinity, Boolean exitContext) at System.Threading.WaitHandle.InternalWaitOne(SafeHandle waitableSafeHandle, Int64 millisecondsTimeout, Boolean hasThreadAffinity, Boolean exitContext) at System.Diagnostics.Process.WaitForExit(Int32 milliseconds)...

我搜索并尝试了一些东西,如设置<httpRuntime executionTimeout="300"/>并在代码process.WaitForExit(6000);和更高疗法那里得到了印没有exeption但没有碰上或类似。

有没有错误或我错过了什么?

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

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

+0

你是否阻止主线程? – Fildor

+0

我不这么认为,我该如何检查? – MaxW

+0

我只是想知道为什么它应该被中止,如果在ASP.NET中,我不知道如果阻塞主线程这么久会发生什么。在普通的.net/WinForms应用程序中,您的GUI将无响应。但在ASP上 - 我真的不知道是否有机制中止长时间运行的东西。出于某种原因你是否必须等待退出?如果不是只是省略它。如果是,请尝试在工作线程上执行所有这些操作,并查看是否也有中止。 – Fildor

回答

0

经过大量的尝试,测试和搜索,我相信我的代码有效。 所以我仍然不知道为什么我的代码停止工作。 但是从服务器上的Adobe Reader 9.0更改为7.0,现在可以使用。

当我用Adobe Reader 9.0在本地进行调试时,它也起作用了,所以我想也许在网络服务器上有更新。我还没有验证过。