Как прекратить WINWORD.EXE при использовании классического ASP? - PullRequest
0 голосов
/ 10 июня 2009

У меня есть пользователь, у которого есть для использования Microsoft Word 2007 для создания и управления текстовыми документами в своем веб-приложении ASP. Мне хорошо известна статья « Соображения по поводу серверной автоматизации Office » в КБ и множество сторонних компонентов, доступных для такого рода вещей, но они довольно неплохо пошли по этому пути уже.

Проблема, с которой он сталкивается, заключается в том, что процесс WINWORD.EXE никогда не завершается, даже если он вызывает Quit для объекта приложения.

Например:

Set objWord = Server.CreateObject("Word.Application")
'' Do work
objWord.Quit
Set objWord = Nothing

Как и следовало ожидать, его сервер в конечном итоге завален осиротевшими WINWORD.EXE процессы, требующие ручного вмешательства для прекращения.

Есть ли способ явно завершить эти WINWORD.EXE процессы в скрипте?

Обновление:

Я достиг некоторого прогресса в этом, и я думаю, что у меня есть понимание того, в чем проблема. Когда приложение Office запускается впервые под новой учетной записью Windows, оно запрашивает ваше имя и инициалы. Теперь, поскольку нет видимого графического интерфейса, там нет никого, кто бы нажимал все нужные кнопки. Я попытался запустить WINWORD.EXE в качестве идентификатора анонимной учетной записи на сайте, используя RUNAS, но есть некоторая проблема с правами, которая не позволяет Word или Office выполнить какую-либо другую процедуру начальной настройки, которую он хочет выполнить.

Ответы [ 2 ]

2 голосов
/ 10 июня 2009

Я могу придумать две вещи:

MyWorkBook .Saved не было установлено в значение true. В результате вызов Quit приводит к тому, что WinWord отображает диалоговое окно «Хотите сохранить»? На сервере. Под сеанс без рабочего стола. Излишне говорить, что Word никогда не удается выйти, поскольку он ждет пользователя.

Скрипт вашего пользователя не всегда попадает в строку Quit. Это частые и, возможно, основные причины против использования автоматизации Office, так как вам действительно нужно несколько уровней обработки исключений и, наконец, операторов (которые не являются сильной стороной VBScript или классических движков ASP) для обеспечения надлежащей очистки экземпляра.

0 голосов
/ 15 июня 2009

Этот вопрос больше не актуален. Почти все проблемы были связаны с WINWORD.EXE требованием повышенных привилегий (которые выше, чем у учетных записей анонимных пользователей веб-сайта) для выполнения определенных задач.

Клиент разумно решил использовать ASPOSE.Words для .NET , который также имеет оболочку, вызываемую COM, так что классический код ASP также может использовать его.

...