如何才能杀死指定的进程,也就是我之前用程序打开excel文件时启动的进程,我现在程序里好多个excel.exe.程序打开几次Excel就有几个exe进程。下面的方法把所有的excel进程全都杀死了,包括我打开的其他的excel文件随之被关闭,所以我现在想
有没有一种方法可以杀死指定的进程,而不是一个不留,把excel进程全杀了。各位帮帮忙!
GC.Collect();
System.Diagnostics.Process[] myProcesses ;
myProcesses = System.Diagnostics.Process.GetProcessesByName("EXCEL");
foreach(System.Diagnostics.Process myProcess in myProcesses)
{
myProcess.Kill();
}
有没有一种方法可以杀死指定的进程,而不是一个不留,把excel进程全杀了。各位帮帮忙!
GC.Collect();
System.Diagnostics.Process[] myProcesses ;
myProcesses = System.Diagnostics.Process.GetProcessesByName("EXCEL");
foreach(System.Diagnostics.Process myProcess in myProcesses)
{
myProcess.Kill();
}
解决方案 »
- 用过Aspose.Cells的高手进来帮忙
- DropDownList 可以实现多选功能吗?我想要DropDownList格式的但可以实现多选的,别的控件也可以,高手救命
- C# 时间
- C#和XML的编码问题,都怕了!!!
- [请高手指教]如何用C#来调用VC写的DLL呀?
- 我是个超级新手,刚学c#1个星期,请教如何实现类似QQ视频聊天的功能??
- 用WebClient 获取网页源码,源码达到一定长度,只能获取到部分源码,而源码比较短的可以获取完整?
- 动软的模版生成模式,求方法
- 问一个有关datatable的问题。
- C# 引用程序在另一台电脑上安装后运行报错
- 怎样使用ghostscript API 把PDF文件转化成TIFF文件呢?用C#实现
- 如何使得一个应用程序始终得不到焦点
//int m = 0;
//GetWindowThreadProcessId(t, out m);
//Process p = Process.GetProcessById(m);
//p.Kill();
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
找我的回复
// 这里只贴了退出代码 FreeExcelObject(ExcelWorksheet);
ExcelWorkbook.Close(Missing.Value, Missing.Value, Missing.Value); // 我用的是office 2003
FreeExcelObject(ExcelWorkbook);
FreeExcelObject(ExcelWorkbooks);
ExcelApplication.Quit();
FreeExcelObject(ExcelApplication);
// 我是参照着msdn上微软的推荐做法
#region void FreeExcelObject(Object Obj) // 释放Excel对象
/// <summary>
/// 释放Excel对象
/// </summary>
/// <param name="Obj">Excel对象</param>
void FreeExcelObject(Object Obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(Obj);
}
catch
{
}
finally
{
Obj = null;
}
}
#endregion
{
Process[] myProcesses;
DateTime startTime;
myProcesses = Process.GetProcessesByName("Excel"); //得不到Excel进程ID,暂时只能判断进程启动时间
foreach(Process myProcess in myProcesses)
{
startTime = myProcess.StartTime; if(startTime > beforeTime && startTime < afterTime)
{
myProcess.Kill();
}
}
}
private void Dispose()
{
workBook.Close(null,null,null);
app.Workbooks.Close();
app.Quit(); if(range != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(range);
range = null;
}
if(range1 != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(range1);
range1 = null;
}
if(range2 != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(range2);
range2 = null;
}
if(textBox != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(textBox);
textBox = null;
}
if(workSheet != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
workSheet = null;
}
if(workBook != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
workBook = null;
}
if(app != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
app = null;
} GC.Collect(); this.KillExcelProcess();
{
System.Diagnostics.Process[] excelProc = System.Diagnostics.Process.GetProcessesByName("EXCEL");
System.DateTime startTime = new DateTime();
int m, killId = 0;
for (m = 0; m < excelProc.Length; m++)
{
if (startTime < excelProc[m].StartTime)
{
startTime = excelProc[m].StartTime;
killId = m;
}
}
if (excelProc[killId].HasExited == false)
{
excelProc[killId].Kill();
}
}
在excel执行完以后,直接调用这个方法就OK了
使用 Visual Studio .NET 客户端执行自动化功能后不退出 Office 应用程序
http://support.microsoft.com/kb/317109/zh-cn
每个对象都需要存给新变量并在退出时对他们进行引用计数的减少工作后设置null要确保退出 Office 应用程序,自动化代码一定要满足以下条件:
将每个对象声明为新变量。例如,将下面的代码行
oBook = oExcel.Workbooks.Add()
更改为以下内容:
dim oBooks as Excel.Workbooks
oBooks = oExcel.Workbooks
oBook = oBooks.Add()
停止使用某个对象时,应使用 System.Runtime.InteropServices.Marshal.ReleaseComObject。这样可以减少 RCW 的引用计数。
要释放对变量的引用,请将变量设置为等于 Nothing 或 Null。
使用 Office 应用程序对象的 Quit 方法通知服务器关闭。
GC.Collect(); 这个完全可以释放比如说你操作excel的方法为 void DoAction();DoAction();
GC.Collect();//把这行写在DoAction方法调用之后,放到DoAction方法里边没用
{
Excel.Application excelApp = null;
private object MISSING_OBJECT = Type.Missing;
try
{
excelApp = new Excel.ApplicationClass();
excelApp.DisplayAlerts = false; excelApp.Workbooks.Open(xlsPath,
2,
MISSING_OBJECT,
MISSING_OBJECT,
MISSING_OBJECT,
MISSING_OBJECT,
MISSING_OBJECT,
MISSING_OBJECT,
MISSING_OBJECT,
MISSING_OBJECT,
MISSING_OBJECT,
MISSING_OBJECT,
MISSING_OBJECT);
workBook = excelApp.Workbooks[1];
.......
..........
}
catch
{
throw;
}
finally
{
excelApp.Quit();
}
}调用:Process(....);
GC.Collect();
GC.WaitForPendingFinalizers();
private object MISSING_OBJECT = Type.Missing;
button_OpenExcel_Click
{
open();
}open()
{
try
{
OpenExcel();
}
finlly
{
GC.Collect();
}
}OpenExcel()
{
//Open Excel Code
}