我有一个产生子进程的服务,这些子进程又将打印作业写入 Windows spooler。
这在大多数地方都没有问题,除了在调用时子进程挂起的一台服务器(运行 Server 2008 SP2,其他 2008 SP2 服务器工作正常)上:
PrintDialog.PrintDocument
或者如果我执行以下操作,它会冻结在 Write 上。
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 提示符启动相同的方式运行?