关于VB.net关闭EXCEL进程的问题
我有一台服务器,一台客户端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的方法怎么也杀不掉呢。
想问一下,大家有啥解决办法么?谢谢!
- VB.NET code
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
[解决办法]
在服务器端运运kill进程要有一定的权限才行.至于excel退出,个人经验啊,我是只要用过个excel对像都要一层层退,且从里到外...麻烦啊.没asp方便了.