我有一个生成子进程的服务,该子进程又将打印作业写入Windows后台打印程序。
这在大多数地方都可以正常工作,除了在一台服务器(运行Server 2008 SP2,其他2008 SP2服务器运行正常)上,子进程在调用时挂起该子进程:
PrintDialog.PrintDocument
或者如果我执行此操作,它将在“写入”时冻结。
Dim printWriter = PrintQueue.CreateXpsDocumentWriter(printDlg.PrintQueue)
printWriter.Write(paginator, printDlg.PrintTicket)
或使用
时System.Drawing.Printing.PrintDocument.Print
没有作业写入假脱机程序队列。
但是,如果我终止了该进程并从命令提示符下手动重新启动子进程,则它可以正常打印。
将主要服务进程设置为使用相同的用户帐户登录,并且产生的进程也以相同的用户帐户运行,因此问题似乎是由于该进程是如何启动的。
启动子进程时,我尝试了以下方法:
Dim psi As New ProcessStartInfo
psi.FileName = exe
psi.Arguments = "ID=" & Id.ToString
psi.UseShellExecute = False
psi.CreateNoWindow = True
psi.Verb = "runas"
psi.RedirectStandardError = True
psi.RedirectStandardOutput = True
psi.LoadUserProfile = True
ChildProcess = Process.Start(psi)
还有什么我可以做的事情来使服务启动的过程的行为与从cmd提示符启动的过程相同吗?
答案 0 :(得分:0)
通常无法从服务进行打印,我希望您的意思是Windows服务。原因是Windows服务没有桌面(GDI),因此没有打印机。
因此,尝试从服务进行打印与从您以具有运行GDI引擎的台式机用户打开的控制台进行打印完全不同。
可以从服务中打印一些变通方法,但是这很麻烦,Microsoft不建议这样做!