如下方法回收不了EXCEL,始终残留EXCEL进程,请各位大虾赐教
        System.Runtime.InteropServices.Marshal.ReleaseComObject(exlsheet)
        exlsheet = Nothing
        exlbook.Close()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(exlbook)
        exlbook = Nothing
        exlApp.Quit()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(exlApp)
        exlApp = Nothing
        GC.Collect()

解决方案 »

  1.   

    kill EXCEL Process...Process.KillSee DotNet SDK..
      

  2.   

    Browser = new InternetExplorer();
       Browser.Visible = true;
       Browser.GoHome();
       procs = Process.GetProcessesByName("IEXPLORE"); try
            {
            if (procs[0].Responding)
                procs[0].CloseMainWindow();
            else
        procs[0].Kill();
    }
        catch
    {
    MessageBox.Show("Could Not Find the IEXPLORE Process");
    }
    可以用类似的办法杀死进程
      

  3.   

    Dim process As System.Diagnostics.Process
            For Each process In System.Diagnostics.Process.GetProcesses
                If process.ProcessName = "EXCEL" Then
                    process.Kill()
                End If
            Next
    用以上方法时,你所打开的其它Excel进程也会一起杀掉,郁闷~
      

  4.   

    还有CSDN搞不定的?........继续郁闷~~~~
      

  5.   

    是vbscript吗?我用js的时候也遇到了,而且还不能调用那个ReleaseComObject。最后我放到try..catch..finally..里面,居然异常捕获后不从finally里走,郁闷!
      

  6.   

    由于Excel中你是用的每一个对象可能都是一个COM组件,我们知道COM组件是通过引用计数器来控制的,当COM的引用计数为0,该COM对象就会被释放。
    所以我想你应该先将所有的Excel对象都释放了,先调用Close(如果有),在设置其为null(或者nothing),确定释放了所有的对象后再调用System.Runtime.InteropServices.Marshal.ReleaseComObject方法释放每一个COM对象(这里的对象可能包括Rang和Worksheet等)。
    最后调用垃圾回收机(我认为这个可以不用调,调用这个效率比较低)。看你的代码好像是先释放的COM再设置noting的。你可以交换一下顺序试一试。如果此法不行,你可以直接kill调Excel的进程(这样做是比较危险的)。可用通过Process.GetProcessesByName方法得到当前服务器上的所有叫Excel的进程,然后循环的Kill之!该方法的具体用法请参考MSDN在线帮助!
      

  7.   

    顺序是:
    1、先调用这些组件的Close或者Quit方法
    2、调用System.Runtime.InteropServices.Marshal.ReleaseComObject释放每一个COM对象
    3、设置这些对象为null或者nothing
      

  8.   

    TO cuike519(marshal):
        首先感谢你的关注!:)
        按照你所说的,先Close(如果有),再置NULL(或者Nothing),最后ReleaseComObject,这时执行出现错误(编译通过),使用Try....Catch...Exception还是回收不了.
      

  9.   

    默认情况下asp.net木有权限去杀进程的。只有提升权限。
      

  10.   

    http://www.cnblogs.com/renyu732/archive/2005/06/15/174866.html
      

  11.   

    下面是一些处理方法的集锦,请楼主参考.
    (ASP)
    经过调试,死进程问题已经解决,现在总结一下:
    在生成Excel表之前加一句On Error Resume Next,确保程序能运行到最后,在打印结束得时候,首先要保存文件,然后再Quit,代码可参照如下:On Error Resume Next
    Set xlApp = CreateObject("EXCEL.Application")
    xlApp.Application.DisplayAlerts = False
    .......
    xlBook.Save
    xsmd_xls.quit
    xsmd_xls.Workbooks.Close 
    --------------------------------------------------------------------------------(NET)private void KillProcess(string processName)
    {
    System.Diagnostics.Process myproc= new System.Diagnostics.Process();
    //得到所有打开的进程
    try{
    foreach (Process thisproc in Process.GetProcessesByName(processName)) {
    if(!thisproc.CloseMainWindow()){
      thisproc.Kill();
      }
    }
    }
    catch(Exception Exc)
    {
    msg.Text+= "杀死" + processName + "失败!";
    }
    }
    --
    试验不成功  
    --------------------------------------------------------------------------------
    问题描述:在一个winform程序里创建了一个命名为app的Excel Application,完成Excel的导出任务后,执行app.Quit()关闭Excel文件,但是查看任务管理器里还是存在那个Excel进程,占据着十几MB的内存,只有关闭了那个winform程序的窗体,那个进程才会消失,后来看到有些网友说可以这样做:
    System.Runtime.InteropServices.Marshal.ReleaseComObject(pics);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(objbook);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(app);pics=null;
    worksheet=null;
    objbook=null;
    app=null;GC.Collect();但是,我试后,根本没用。
    求教各位高手,请问如何才能不在关闭那个winform窗体的情况下销毁那个Excel进程?
    我这里也遇到过这个问题的你还差一点
    System.Runtime.InteropServices.Marshal.ReleaseComObject(Range);Range = null;加入到你前面的代码中就好了,试试看
    --------------------------------------------------------------------------------如何得到我机器上所有正在运行的进程? 
    作者:孟宪会 出自:【孟宪会之精彩世界】 发布日期:2003年6月15日 9点4分56秒
    --------------------------------------------------------------------------------使用System.Diagnostics名称空间下的static Process.GetProcesses()[C#] 
    Using System.Diagnostics; ... 
    foreach ( Process p in Process.GetProcesses() ) 
    Console.WriteLine( p ); // string s = p.ToString(); [VB.NET] Imports System.Diagnostics 
    ... 
    Dim p As Process 
    For Each p In Process.GetProcesses() 
    Console.WriteLine(p) ' string s = p.ToString() 
    Next p 
      

  12.   

    感谢hchxxzx(NET?摸到一点门槛) ,但我没用到Range.所以下面这个就不用了.
    System.Runtime.InteropServices.Marshal.ReleaseComObject(Range);
    Range = null;
    除了以上没其它原因吗?
      

  13.   

    http://dotnet.aspx.cc/ShowDetail.aspx?id=D38781F3-07FE-4BCF-9B67-B657985BA063  如何杀死Word,Excel等进程?
      

  14.   

    我买了一个 便宜的 asp.net空间!才50元!高兴!给分!!
    100mb 的!可以做论坛!才 50元!!速度飞快!
    www.hi876.com 你们看看
      

  15.   

    首先当前进程没有权限,其次你少释放了Cell