/ / Instancja programu Excel nie ginie w menedżerze zadań VB.net - excel, vb.net

Instancja Excela nie ginie w menedżerze zadań VB.net - excel, vb.net

Instancja programu Excel (excel.exe) w menedżerze zadań nie jest zabijana po zakończeniu wykonywania przycisku.

Private Sub Extract_Click(sender As Object, e As EventArgs) Handles Extract.Click
Dim xlApp As New Excel.Application
Dim wbXLsource As Excel.Workbook
Dim wbXLtarget As Excel.Workbook
Dim shXLsource As Excel.Worksheet
Dim shXLtarget As Excel.Worksheet
Dim datestart As Date = Date.Now
wbXLsource = xlApp.Workbooks.Open(xlSourcePath)
wbXLtarget = xlApp.Workbooks.Open(xlTargetPath)
Dim dateEnd As Date = Date.Now
End_Excel_App(datestart, dateEnd)
End Sub

Private Sub End_Excel_App(datestart As Date, dateEnd As Date)
Dim xlp() As Process = Process.GetProcessesByName("EXCEL")
For Each Process As Process In xlp
If Process.StartTime >= datestart And Process.StartTime <= dateEnd Then
Process.Kill()
Exit For
End If
Next
End Sub

Próbowałem użyć koncepcji garbage collector również, ale wersja Excel zostaje zabita dopiero po zamknięciu aplikacji. Muszę zamknąć wystąpienie programu excel (excel.exe) po zakończeniu wykonywania przycisku

Odpowiedzi:

0 dla odpowiedzi № 1

Użyj tego kodu .... Używałem tego i zamyka za każdym razem

For Each proc In System.Diagnostics.Process.GetProcessesByName("EXCEL")
If proc.MainWindowTitle.Trim() = "" Then
proc.Kill()
End If
Next

A jeśli masz funkcję obsługi błędów Try Catch ...

Try

"stuff more stuff

Catch Ex as Exception

For Each Proc in System.......
......
Next
Finally
GC.Collect()
End Try

Działa za każdym razem.


0 dla odpowiedzi nr 2

Zamykanie aplikacji przez wywołanie xlApp.Quit() zamyka go, ale nie zostanie usunięty, jeśli z pamięci.

Aby uwolnić pamięć, możesz postępować zgodnie z radami podanymi przez Świetna odpowiedź Siddharth Rout:

Private Sub ReleaseObject(ByVal obj As Object)
Try
Dim intRel As Integer = 0
Do
intRel = System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
Loop While intRel > 0
MsgBox("Final Released obj # " & intRel)
Catch ex As Exception
MsgBox("Error releasing object" & ex.ToString)
obj = Nothing
Finally
GC.Collect()
End Try
End Sub