У меня есть служба, которая порождает дочерние процессы, которые в свою очередь записывают задания на печать в диспетчер очереди 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)
Есть ли что-нибудь еще, что я могу сделать, чтобы процесс, запущенный службой, действовал так же, как если бы он был запущен из командной строки?