如何从正在运行的对象中获取进程 ID?
Dim xlApp As Object = CreateObject("Excel.Application")
我需要使用后期绑定,因为我不能保证我会得到哪个版本,所以使用Microsoft.Office.Interop.Excel
不起作用。
'do some work with xlApp
xlApp.Quit
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
xlApp = nothing
此时 Excel 仍在后台运行。我熟悉使用变量并释放它们然后使用的所有建议:System.Runtime.InteropServices.Marshal.ReleaseComObject(o)
. 这不能可靠地工作。我正在做的工作非常复杂。我使用多个文件的每个循环等。释放 Excel 中的所有资源是不可能的。我需要一个更好的选择。
我想Process.Kill
在 Excel 上使用,但我不知道如何从 xlApp 对象获取进程。我不想杀死所有 Excel 进程,因为用户可能打开了工作簿。
我尝试使用Dim xProc As Process = Process.Start(ExcelPath)
then usingxProc.Kill()
这有时会起作用,除非使用正确的 Excel 对象XLApp = GetObject("Book1").Application
或者XLApp = GetObject("", "Excel.Application")
用户已经打开 Excel 窗口有点棘手。我需要一个更好的选择。
我无法使用GetActiveObject
或BindToMoniker
获取 Excel 对象,因为它们仅在使用早期绑定时才能使用。例如Microsoft.Office.Interop.Excel
如何从正在运行的对象中获取进程 ID?
编辑:实际上我对如何让 Excel 很好地退出的重新讨论并不感兴趣。许多其他问题已经解决了这个问题。这里和这里我只想杀了它;干净、准确、直接。我想杀死我开始的确切进程,而不是其他进程。