2009-06-10 4 views
0

У меня есть пользователь, у которого есть, чтобы использовать Microsoft Word 2007 для создания и обработки текстовых документов в своем веб-приложении ASP. Я хорошо знаю статью «Considerations for server-side Automation of Office» KB и многие сторонние компоненты, доступные для этого, но они уже прошли по этому пути.Как закончить WINWORD.EXE при использовании классического ASP?

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

Например:

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

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

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

Update:

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

ответ

2

Есть две вещи, которые я могу думать:

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

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

+0

David - спасибо за ввод. Сценарий, который стоит выше, где он только создает экземпляр Word.Application, а затем делает Quit, по-прежнему оставляет процесс позади. Мне еще нужно установить MyWorkBook.Saved? – Kev

+0

Еще одна вещь, которую нужно попробовать - убедиться, что ConnectKind - ckNewInstance, и что для AutoQuit установлено значение True. Это касается любой ситуации, когда Word остается открытым для повторного использования. Какая версия Word работает на сервере (я прекратил использовать Automation в Word 2003, никогда не пробовал ее с 2007) – David

+0

Это Word 2007. Какие объекты ConnectKind и AutoQuit? – Kev

0

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

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