Processo do Excel ainda é executado após o fechamento em VB.net
Minha pergunta é basicamente como terminar o processo Excel.exe que é executado ao usar o Excel. No aplicativo eu abro e uso uma pasta de trabalho do Excel com algumas folhas e, em seguida, deixo para o usuário fazer o que quiser, meu problema é que meu aplicativo nunca deixa de ir ao processo do Excel.
Se o aplicativo for fechado antes de fechar o Excel, o processo termina quando o Excel é fechado, caso contrário, se eu fechar meu aplicativo depois de fechar o Excel, o processo continua em execução.
Eu tentei algumas coisas que eu encontrei em torno da internet para fazer com GC.collect e esperando por finalizadores pendentes ou algo nesse sentido no entanto nem funcionou.
Eu também posso fechar o processo de excel felizmente, o único problema é não saber se estou fechando uma planilha importante de usuários que eles negligenciaram salvar ainda ou minar.
Não tenho certeza se algum código meu ajudará com uma resposta, mas estou usando microsoft.office.interop.excel para chegar ao excel, e estou usando uma pasta de trabalho já salva na pasta de recursos do aplicativo.
-Editar-
Aqui está tudo que eu tentei, eu sei que é um pouco exagerado, mas infelizmente ainda não termina o processo
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()
-Editar- Aqui está o método quitExcel
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
Ele já havia tentado fazer a mesma coisa com o ID do processo em sua aula, o problema era que ele não estava funcionando, e é por isso que eu tentei recuperar o ID do processo que funcionou.