关于VB.net关闭EXCEL进程的问题

bronica_chen bronica_chen 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我有一台服务器,一台客户端PC机.
开发的软件是VB.NET2003, 实现的功能是将EXCEL文件用dialog下载后,关闭EXCEL进程。
用过Kill进程,也用过
System.Runtime.InteropServices.Marshal.ReleaseComObject(mySheet)
System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook)
System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel)
在服务器上单独运行是可以的,EXCEL进程是可以杀掉的。
但是如果在客户端PC机上用WEB方式浏览系统,文件下载后,进程还保留在SERVER上面。也就是说没有杀掉进程。
在执行For Each p In System.Diagnostics.Process.GetProcesses()的时候,会有错,错误是:
couldn't get process information from remote machine.
但是用上面ReleaseComObject的方法怎么也杀不掉呢。
想问一下,大家有啥解决办法么?谢谢!


Private Function CreateFile() As Boolean
Dim rValue As Boolean = False
Dim myExcel As New Excel.Application
Dim myBook As Excel.Workbook
Dim mySheet As Excel.Worksheet
Dim Folder as string="C:\File\"
Dim FileName as string = "A.csv"

Try
myBook = myExcel.Workbooks.Add()
mySheet = CType(myBook.Worksheets.Item(1), Excel.Worksheet)
mySheet.Activate()


mySheet.Cells(2, 1) = "Name"
mySheet.Cells(3, 1) = "Sex"

myBook.SaveAs(Folder & FileName)
myBook.Close(True)
myExcel.Quit()
myBook = Nothing
myExcel = Nothing
ProcessKill()
GC.Collect()

bReturnVal = True
Catch ex As Exception
mErrMsg = ex.Message
myBook.Close()
myExcel.Quit()
myBook = Nothing
myExcel = Nothing
ProcessKill()
rValue= False
End Try
Return rValue
End Function

Private Sub ProcessKill()
Dim p As System.Diagnostics.Process
p = New System.Diagnostics.Process
For Each p In System.Diagnostics.Process.GetProcesses()
If p.ProcessName.ToUpper() = "EXCEL" Then
p.Kill()
End If
Next
End Sub

...全文
评论 4
收藏 已收藏
分享
返回顶部
bronica_chen
VB 16,718 成员 110,520 内容