У меня есть Window Service, который используется для выполнения различных заданий, в том числе для печати документа, созданного с помощью WPF.При запуске консольного приложения оно работает нормально, но при запуске из службы Windows просто зависает.
Позвольте мне немного объяснить службу Windows.Чтобы свести к минимуму любые возможные побочные эффекты, Windows Service - это просто оболочка для самой консоли.Итак, когда Window Service запущен (в его методе start), существует простой вызов Process.Start, который вызывает консоль, например:
Process.Start("[path_to_my_console_exe]");
Теперь, когда вызывается код для печати, он простовисит.Я использую PrintDialog API для печати документа.Вызов для печати документа прост:
var printDialog = new PrintDialog();
printDialog.PrintDocument(doc.DocumentPaginator);
Когда нажата PrintDocument, он заблокирует выполнение (метод никогда не завершится).
Итак, я провел небольшое исследование.Googling дал мне несколько советов, поэтому
- Я убедился, что служба Windows работает с теми же разрешениями, что и автономная консоль.
- Я убедился, что служба Windows работает как процесс x64, так же, как и автономная консоль
- Я попытался отладить метод PrintDialog.PrintDocument.Я буквально загрузил код из ReferenceSource , и это дало мне новое понимание, но, к несчастью, это не решило проблему, просто он определил, какой метод блокирует выполнение (это метод XpsDocumentWriter.Writer., строка 460).
Теперь, после всего этого, я уверен, что это должно быть что-то относительно разрешений.Хотя служба Windows использует того же пользователя для запуска в качестве автономного консольного приложения (администратор), мне кажется, что он по-прежнему не обладает всеми необходимыми разрешениями.Есть ли что-то особенное с Windows Service здесь?Я что-то упустил, есть ли что-то еще, что должно быть установлено для службы Windows перед запуском консоли?