RKeyy Sii Ответов: 1

Как правильно завершить / закрыть WINWORD. EXE / word interop in VB.NET?


У меня есть приложение, которое генерирует отчет с помощью шаблона файла Word. Приложение заполнит шаблон сведениями, предоставленными пользователями, и записями базы данных. Я запускаю свое приложение на другой сервер с помощью удаленного рабочего стола.

Моя проблема в том, что WINWORD.EXE процесс не завершается и остается в диспетчере задач после завершения генерации отчета (сохраняется отчет в базе данных и удаляется сгенерированный файл).

При входе в учетную запись службы WINWORD.EXE процесс завершается должным образом и удаляется из списка диспетчера задач. При выходе из системы-ВИНВОРД.EXE остается в списке. И это может привести к исключению из памяти, когда несколько процессов Word не завершаются.

Отчеты Word создаются с помощью Microsoft.Офис.Взаимодействие.Word, Version=12.0.0.0

Вот код сохранения нового файла, закрытия приложения Word, сохранения отчета и удаления сгенерированного файла:

Marshal.releaseComObject(rng)

Dim strFileName As String = comm.GenerateFileName(strUser_id, strVPN) & ".docx"

' Save the document.
Dim filename As Object = Path.GetFullPath(strNewFilePath & strFileName)
newDoc.SaveAs(FileName:=filename)

' Close.
Dim save_changes As Object = False
newDoc.Close(save_changes)
WordApp.Quit(save_changes)

Marshal.ReleaseComObject(newDoc)
Marshal.ReleaseComObject(WordApp)

rng= Nothing
newDoc = Nothing
WordApp = Nothing

' Let GC know about it
GC.Collect()

' Save the file to database
SaveFormat(Filename, strUser_Id, strFamilyId, strVPN, DateTime.Now.ToString(), "application/vnd.ms-word", br_id, "doc")

If File.Exists(filename) then
      File.Delete(filename)
End If


Что я уже пробовал:

Я все еще исследую различные работы здесь.

В excel мы получаем решение, получая идентификатор процесса открытого экземпляра Excel с помощью свойства Hwnd и класса GetprocessById.

Я где-то читал, что Word 2013 и позже имеет приложение.Свойство hwnd. Это правда? Есть ли у Word свойство hwnd?

Я очень ценю вашу помощь. Спасибо :)

1 Ответов

Рейтинг:
1

Dave Kreskowiak

Вы не можете использовать Office Interop в ASP.NET применение. Почему? Несколько запросов одновременно не поддерживаются. Другими словами, Офисные приложения не поддерживают повторный доступ.

Вы можете прочитать об этом подробнее здесь[^]