如下方法回收不了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()
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()
解决方案 »
- 关于execCommand执行的问题。
- asp.net网站安全
- 貌似是编码问题
- treeview中实现右击弹出式菜单
- 有没有可能用后台代码隐藏一个表格,因为我想在读数据库,发现数据不存在的时候隐藏表格。
- 如何才能在DATAGRID的ItemCommand事件中得到模板列中控件的属性?
- 我都问得没有分了 郁闷 ASP.NET中点个按钮 新弹出一个页面 然后点个图啊什么的 。。。。。
- 我用asp.net做得网站,其中有一项功能是上传文件,在本机上没有问题,在部署的时候程序运行发生错误,我是将文件上传时保存在一个目录中
- 关于input验证为空
- datagrid的删除按钮能不能点击它出现javascript确认框?
- 这个XML文件我应该如何操作,谢谢!
- DataGrid如何去掉那个边框的线?我写的代码为什么不受控制?
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");
}
可以用类似的办法杀死进程
For Each process In System.Diagnostics.Process.GetProcesses
If process.ProcessName = "EXCEL" Then
process.Kill()
End If
Next
用以上方法时,你所打开的其它Excel进程也会一起杀掉,郁闷~
所以我想你应该先将所有的Excel对象都释放了,先调用Close(如果有),在设置其为null(或者nothing),确定释放了所有的对象后再调用System.Runtime.InteropServices.Marshal.ReleaseComObject方法释放每一个COM对象(这里的对象可能包括Rang和Worksheet等)。
最后调用垃圾回收机(我认为这个可以不用调,调用这个效率比较低)。看你的代码好像是先释放的COM再设置noting的。你可以交换一下顺序试一试。如果此法不行,你可以直接kill调Excel的进程(这样做是比较危险的)。可用通过Process.GetProcessesByName方法得到当前服务器上的所有叫Excel的进程,然后循环的Kill之!该方法的具体用法请参考MSDN在线帮助!
1、先调用这些组件的Close或者Quit方法
2、调用System.Runtime.InteropServices.Marshal.ReleaseComObject释放每一个COM对象
3、设置这些对象为null或者nothing
首先感谢你的关注!:)
按照你所说的,先Close(如果有),再置NULL(或者Nothing),最后ReleaseComObject,这时执行出现错误(编译通过),使用Try....Catch...Exception还是回收不了.
(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
System.Runtime.InteropServices.Marshal.ReleaseComObject(Range);
Range = null;
除了以上没其它原因吗?
100mb 的!可以做论坛!才 50元!!速度飞快!
www.hi876.com 你们看看