2016-03-18 3 views
0

У нас есть служба Windows, содержащая FileSystemWatcher. Этот наблюдатель подбирает новые файлы. & создает документ Excel. Документ Excel затем автоматически отправляется на принтер с помощью Excel Interop.Автоматическая печать Excel из службы Windows

Выполнена вся настройка вокруг Автоматизации Excel (создание каталога рабочего стола в C:\Windows\SysWOW64\config\systemprofile, предоставление локальных прав активации учетной записи службы в приложении Microsoft Excel).

Печать работает в течение нескольких дней, но затем внезапно, казалось бы, случайно, Excel Interop не может печатать. Служба застревает & не продолжает обработку. Исключений не происходит, служба просто останавливается &, похоже, висит. Ниже строка кода, где это происходит:

ws.PrintOutEx(Type.Missing, Type.Missing, Type.Missing, Type.Missing, printerName, Type.Missing, Type.Missing, Type.Missing); 

ws выше является экземпляром Microsoft.Office.Interop.Excel.Worksheet

Как только это произойдет, никакого вмешательства не кажется, решить эту проблему. Мы попытались остановить службу (используя taskkill, так как она перестает отвечать), убивая процесс EXCEL.exe, который запускает &, начиная с его резервного копирования. Мы также попробовали перезагрузку сервера (под управлением Windows Server 2008). Каждый раз, когда загружается новый файл, служба застревает в этой строке. Единственный способ решить эту проблему - удалить & переустановку Excel.

У кого-нибудь есть подозрение, что может быть причиной этого &, как это можно решить? Даже альтернативные предложения по чтению файла & будут автоматически отправляться на принтер Excel.

ответ

-1

Корпорация Майкрософт не рекомендует и не поддерживает автоматизацию приложений Microsoft Office из любого необработанного, неинтерактивного клиентского приложения или компонента (включая службы ASP, ASP.NET, DCOM и NT), поскольку Office может проявлять неустойчивое поведение и/или тупик, когда Office запущен в этой среде.

Если вы создаете решение, которое выполняется в контексте на стороне сервера, вы должны попытаться использовать компоненты, которые были безопасны для автоматического выполнения. Или вы должны попытаться найти альтернативы, которые позволяют хотя бы часть кода запускать клиентскую сторону. Если вы используете приложение Office из серверного решения, для успешного выполнения приложения не будет достаточного количества необходимых возможностей. Кроме того, вы рискуете стабильностью своего общего решения. Подробнее об этом читайте в статье Considerations for server-side Automation of Office.

В качестве обходного пути вы можете использовать Open XML SDK, см. Welcome to the Open XML SDK 2.5 for Office. Или просто используйте сторонние компоненты, предназначенные для выполнения на стороне сервера.

+0

Благодарим за быстрый ответ! Хорошо, так что, если это не должно быть сделано с автоматическими, неинтерактивными клиентами, может ли что-то вроде консольного приложения использоваться в качестве монитора? Причина, по которой мы используем Interop, заключается в том, что используемый шаблон Excel имеет вертикально вращающуюся ячейку, которую ни одна из сторонних библиотек, похоже, не может произвести на распечатках. –

Смежные вопросы