无论如何,VB.NET Excel进程都不会关闭

时间:2018-01-22 15:09:28

标签: excel vb.net process garbage-collection

我在VB.NET环境中编写的应用程序出现问题,必须打开Excel文件才能获取一些数据,然后关闭它。问题在于,无论我做什么,在Windows'任务管理器应用程序总是那里。

申请表的作用:

 EA = New Excel.Application
 OptionsSource = EA.Workbooks.Open(Filename:=myFileName, ReadOnly:=True)
 wks = OptionsSource.Worksheets(1)
 ' reads data from cells and stores it in an array
 wks = Nothing
 OptionsSource.Close()
 OptionsSource = Nothing
 EA.Quit()
 EA = Nothing

我尝试了什么:

 GC.Collect() ' after the .Close(), but really I tried it everywhere
 Marshal.ReleaseComObject(Obj) ' after each Object

我见过的事情:

 Application.Exit() ' seems like I cannot use it somehow

我能做什么(但我还没弄明白怎么做):

 Process.Kill ' I'd have to find exactly the process that is started by EA = New Excel.Application and then kill it

我不能肯定做的是杀死所有被称为" EXCEL" (不过我知道怎么做)。

如何一劳永逸地核对Excel.Application

2 个答案:

答案 0 :(得分:1)

这是一种谨慎(可能过于谨慎)的方法,总是对我有用。我引用每个COM对象,以便稍后释放它们。我在访问COM对象时避免使用多个Custom Claims,而不是从.获取xlSheet,我每次只进行一级,所以我需要变量xlApp.Workbooks.Open(Filename:= FileName, ReadOnly:= true).Sheets(1),{{1 },xlAppxlBooks。有些人会说这是不必要的,但这并不会让我感到烦恼,因为我已经成功使用这种方法。

无论如何,它与你的表现方式类似。但你可能想要至少尝试xlBook,如果没有其他的话。

xlSheet

答案 1 :(得分:0)

通过Hwnd杀死该进程。不是很漂亮,但似乎有效: