Vb.net 为什么在任务管理器中,当我关闭Form1时Excel进程不存在,而Outlook进程存在?
运行以下代码并检查任务管理器以查看Excel和Outlook进程是否存在:Vb.net 为什么在任务管理器中,当我关闭Form1时Excel进程不存在,而Outlook进程存在?,vb.net,excel-interop,Vb.net,Excel Interop,运行以下代码并检查任务管理器以查看Excel和Outlook进程是否存在: Imports Microsoft.Office.Interop Public Class Form1 Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load 'Kill all EXCEL.EXE's from Task Manager For Each prog As
Imports Microsoft.Office.Interop
Public Class Form1
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
'Kill all EXCEL.EXE's from Task Manager
For Each prog As Process In Process.GetProcessesByName("EXCEL")
prog.Kill()
Next
'Kill all OUTLOOK.EXE's from Task Manager
For Each prog As Process In Process.GetProcessesByName("OUTLOOK")
prog.Kill()
Next
'Open new EXCEL.EXE in the Task Manager
Dim xlApp As New Excel.Application
'Open new OUTLOOK.EXE in the Task Manager
Dim olApp As New Outlook.Application
End Sub
End Class
Form1
为什么在任务管理器中,当我关闭Form1时Excel进程不存在,而Outlook进程存在?请尝试这样启动Excel:
Dim xlApp As New Process
xlApp.StartInfo.FileName = "filePath/excel.exe"
xlApp.Start
如果没有帮助,请尝试以下方法启动exe:
Process.Start("filePath\excel.exe")
我无法重现您的问题。Outlook进程确实需要更长的时间才能结束,但它确实结束了 也就是说,有更好的方法来关闭这些过程。正如我在评论中所说的,看看这个链接 首先,您需要在类级别声明
xlApp
和olApp
。您还需要将以下方法添加到代码中:
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
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try
End Sub
然后,您可以在关闭表单时调用此方法:
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
xlApp.Quit()
ReleaseObject(xlApp)
olApp.Quit()
ReleaseObject(olApp)
End Sub
总的来说,您的代码看起来与此类似:
Public Class Form1
Private xlApp As Excel.Application
Private olApp As Outlook.Application
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
'Open new EXCEL.EXE in the Task Manager
xlApp = New Excel.Application
'Open new OUTLOOK.EXE in the Task Manager
olApp = New Outlook.Application
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
xlApp.Quit()
ReleaseObject(xlApp)
olApp.Quit()
ReleaseObject(olApp)
End Sub
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
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try
End Sub
End Class