我需要用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();
的filename
和arguments
是正确的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
返回一个参数异常但我不知道为什么。
你是否阻止主线程? – Fildor
我不这么认为,我该如何检查? – MaxW
我只是想知道为什么它应该被中止,如果在ASP.NET中,我不知道如果阻塞主线程这么久会发生什么。在普通的.net/WinForms应用程序中,您的GUI将无响应。但在ASP上 - 我真的不知道是否有机制中止长时间运行的东西。出于某种原因你是否必须等待退出?如果不是只是省略它。如果是,请尝试在工作线程上执行所有这些操作,并查看是否也有中止。 – Fildor