Несколько экземпляров winword.exe в vb.net - PullRequest
0 голосов
/ 01 октября 2018

У меня есть приложение vb.net, которое открывает документ word 2016 один за другим и использует для него приведенный ниже код

   Public oWA As Microsoft.Office.Interop.Word.Application
   Public oDoc As Microsoft.Office.Interop.Word.Document
   oWA = New Microsoft.Office.Interop.Word.Application
   --below code line opens multiple word document one by one
  oDoc = oWA.Documents.Open(fileName, objMissing, objMissing, objMissing, 
   objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, 
    objMissing, objMissing, objMissing, objMissing, objMissing, objMissing)

Проблема в том, что иногда приложение зависает и перестает обрабатывать текстовые файлы.Затем я увидел два экземпляра Winword.exe в диспетчере задач -> Процесс.Когда я убиваю тот, у кого меньше памяти, приложение запускается автоматически.Как эти два экземпляра генерируются.Могу ли я предотвратить это?Для решения этой проблемы я создал функцию для уничтожения экземпляра winword.exe, но он не работает.

Private Function KillMultipleWord()

    Dim currentProcess As Process()
    currentProcess = System.Diagnostics.Process.GetProcessesByName("winword")
    If currentProcess.Length > 1 Then
        Dim totalBytesOfMemoryUsed As Long = 0
        Dim cmptotalBytesOfMemoryUsed As Long = 0
        Dim cmpProc As System.Diagnostics.Process = Nothing
        For Each proc As System.Diagnostics.Process In currentProcess
            totalBytesOfMemoryUsed = proc.WorkingSet64
            If cmptotalBytesOfMemoryUsed < totalBytesOfMemoryUsed Then
                If cmpProc IsNot Nothing Then
                    cmpProc.Kill()
                End If
                cmpProc = proc
                cmptotalBytesOfMemoryUsed = totalBytesOfMemoryUsed
            Else
                proc.Kill()
            End If
        Next
        cmpProc = Nothing
    End If
    KillMultipleWord = Nothing
End Function

1 Ответ

0 голосов
/ 05 октября 2018

Вам нужно использовать

oDoc.Close()

после каждого документа и

oWA.Quit()

, когда вы закончите.

...