Процесс, порожденный из службы, зависает, вызывая методы Print - PullRequest
0 голосов
/ 26 июня 2018

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

Есть ли что-нибудь еще, что я могу сделать, чтобы процесс, запущенный службой, действовал так же, как если бы он был запущен из командной строки?

1 Ответ

0 голосов
/ 26 июня 2018

Как правило, печать из службы невозможна, я имею в виду службу Windows. Причина в том, что у службы Windows нет рабочего стола (GDI) и, следовательно, нет принтера.

Таким образом, попытка печати из службы - это нечто совершенно иное, чем печать из консоли, которую вы открываете как пользователь с рабочим столом, на котором работает движок GDI.

Существуют некоторые хакерские обходные пути для печати из службы, но это неприятно, и Microsoft их не рекомендует!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...