求B/S结构下杀掉EXCEL进程的办法!
jtdo 2004-10-24 08:34:27 网上的帖子看了一个够,近10页的结果页页翻,有谱的例子试了一遍又一遍,结果还是没有变!
//------------------------------------------------------------------
看到孟子老大的帖子,我试试了如下的方法:
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)
{
Response.Write( "杀死" + processName + "失败!");
}
}
结果是执行 Process.GetProcessesByName(processName) 的时候就出错了,跟踪结果是不允许访问进程--win32异常。
//----------------------------------------------------
看到羊羊的解决方法,如下:
if (myExcel != null)
{
if (myBook != null)
{
if (curSheet != null)
{
if (ran != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(ran);
ran = null;
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(curSheet);
curSheet = null;
}
myBook.Close(false,missing,missing);
System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);
myBook = null;
}
myExcel.Application.Workbooks.Close();
myExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);
myExcel = null;
GC.Collect();
}
结果是:excel进程依然快乐的活着。
//----------------------------------------
还看到了这样一个方法,作者忘了:
/// <summary>
/// 释放EXECL对象。
/// 处理没关掉的excel 进程,导致不能打开EXCLE文件
/// </summary>
/// <param name="myExcel">APPLICATION对象</param>
/// <param name="myWB">Excel._Workbook对象</param>
/// <param name="myWS">Excel._Worksheet对象</param>
/// <param name="myRrange">Excel.Sheets对象</param>
private void closeExcelProcess(Microsoft.Office.Interop.Excel.Application myExcel,Microsoft.Office.Interop.Excel.Workbooks myWB,Microsoft.Office.Interop.Excel._Worksheet myWS,Microsoft.Office.Interop.Excel.Sheets mySheets)
{
// myWB.Close(false, Type.Missing, Type.Missing);
myWB.Close();
myExcel.Workbooks.Close();
myExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(mySheets);
System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);
System.Runtime.InteropServices.Marshal.ReleaseComObject(myWS);
System.Runtime.InteropServices.Marshal.ReleaseComObject(myWB);
mySheets=null;
myWS = null;
myWB = null;
myExcel = null;
GC.Collect();
// Excel.Application objApp = new Excel.Application();
// Excel.Workbooks workbooks=objApp.Workbooks;
// Excel.Sheets objSheets = objApp.Worksheets;
// Excel._Worksheet objSheet;
}
结果是:涛声依旧。
=================================
我的环境是:Win2003 ; VS.NET 2003 ; Office 2003 ;
主啊,路过的弟兄们啊,救救我吧。
给孟子老大发了帖子,还没有等到他的回音... ...