Der Excel-Prozess wird nach dem Schließen in VB.net noch ausgeführt

Meine Frage ist im Grunde nur, wie man den Excel.exe-Prozess beendet, der bei der Verwendung von Excel ausgeführt wird. In der Anwendung öffne und verwende ich eine Excel-Arbeitsmappe mit einigen Arbeitsblättern und überlasse sie dann dem Benutzer, was er will. Mein Problem ist, dass meine Anwendung den Excel-Prozess niemals loslässt.

Wenn die Anwendung vor dem Schließen von Excel geschlossen wird, endet der Prozess mit dem Schließen von Excel. Wenn ich meine Anwendung nach dem Schließen von Excel schließe, läuft der Prozess weiter.

Ich habe ein paar Dinge ausprobiert, die ich im Internet gefunden habe, um mit GC.collect zu tun zu haben, und darauf gewartet, dass Finalizer oder ähnliches ausstehen, aber keines hat funktioniert.

Ich kann den Excel-Prozess auch problemlos abschließen. Das einzige Problem besteht darin, nicht zu wissen, ob ich eine wichtige Tabelle für Benutzer schließe, die sie noch nicht gespeichert haben, oder meine.

Ich bin nicht sicher, ob einer meiner Codes bei der Beantwortung hilfreich ist, verwende jedoch microsoft.office.interop.excel, um Excel zu erstellen, und verwende eine Arbeitsmappe, die bereits im Ressourcenordner der Anwendung gespeichert ist.

-Bearbeiten-

Hier ist alles, was ich versucht habe, ich weiß, es ist ein wenig übertrieben, aber leider endet der Prozess immer noch nicht

Marshal.ReleaseComObject(FirstWorksheet)
Marshal.FinalReleaseComObject(FirstWorksheet)
Marshal.ReleaseComObject(SecondWorksheet)
Marshal.FinalReleaseComObject(SecondWorksheet)
Marshal.ReleaseComObject(ThirdWorksheet)
Marshal.FinalReleaseComObject(ThirdWorksheet)
Marshal.ReleaseComObject(FourthWorkSheet)
Marshal.FinalReleaseComObject(FourthWorkSheet)
Marshal.ReleaseComObject(xlRange)
Marshal.FinalReleaseComObject(xlRange)
Marshal.ReleaseComObject(SecondxlRange)
Marshal.FinalReleaseComObject(SecondxlRange)
Marshal.ReleaseComObject(thirdxlRange)
Marshal.FinalReleaseComObject(thirdxlRange)
Marshal.ReleaseComObject(fourthxlRange)
Marshal.FinalReleaseComObject(fourthxlRange)
Marshal.ReleaseComObject(.activeworkbook)
Marshal.FinalReleaseComObject(.activeworkbook)
Marshal.ReleaseComObject(excelApplication)
Marshal.FinalReleaseComObject(excelApplication)
MSExcelControl.QuitExcel() 'A function made by someone else I work with that was meant to close excel's process
GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect()
GC.WaitForPendingFinalizers()

-Edit- Hier ist die quitExcel-Methode

Friend Shared Sub QuitExcel()
    If Not getExcelProcessID = -1 Then
        If Not excelApp Is Nothing Then
            'Close and quit
            With excelApp
                Try
                    Do Until .Workbooks.Count = 0
                        'Close all open documents without saving
                        .Workbooks(1).Close(SaveChanges:=0)
                    Loop
                Catch exExcel As Exception
                    'Do nothing
                End Try
                Try
                    .ActiveWorkbook.Close(SaveChanges:=0)
                Catch ex As Exception
                    'Do nothing
                End Try

                Try
                    .Quit()
                Catch ex As Exception
                    'Do nothing
                Finally
                    myExcelProcessID = -1
                End Try
            End With
            excelApp = Nothing
        End If
    End If
End Sub

Er hatte bereits versucht, dasselbe mit den Prozess-IDs in seiner Klasse zu tun. Das Problem war, dass seine ID nicht funktionierte. Deshalb habe ich versucht, die Prozess-ID selbst erneut zu ermitteln, was funktioniert hat

Antworten auf die Frage(4)

Ihre Antwort auf die Frage