在Windows服务中从C#中杀死EXCEL.exe进程

前端之家收集整理的这篇文章主要介绍了在Windows服务中从C#中杀死EXCEL.exe进程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 Windows服务,通过Microsoft.Office.Interop.Excel.Application对象打开一个Excel电子表格.
Application xlApp = new Application();
Workbook workbook = xlApp.Workbooks.Open(fileName,2,false);
...
...
workbook.Close();
xlApp.Quit();

在完成工作簿之后,我想杀死EXCEL.exe进程.

我试过以下,没有成功…

// This returns a processId of 0
IntPtr processId;
GetWindowThreadProcessId(new IntPtr(xlApp.Hwnd),out processId);
Process p = Process.GetProcessById(processId.ToInt32());   
p.Kill();

任何人有什么想法,通过Windows服务如何做到这一点?

正确关闭打开的Excel工作簿并退出应用程序是非常困难的.如果我可以找到我将发布的链接,但实质上您必须清理所有对您创建的任何COM对象的引用.这包括来自ODBCConnections(数据连接),Worksheets,Workbooks和Excel应用程序的所有内容.我的工作涉及垃圾收集和System.Runtime.InteropServices.Marshal对象的组合:
// Garbage collecting
GC.Collect();
GC.WaitForPendingFinalizers();
// Clean up references to all COM objects
// As per above,you're just using a Workbook and Excel Application instance,so release them:
workbook.Close(false,Missing.Value,Missing.Value);
xlApp.Quit();
Marshal.FinalReleaseComObject(workbook);
Marshal.FinalReleaseComObject(xlApp);

像你所说的,循环和杀死每个Excel进程通常不是一个好主意,因为如果你作为一个Windows应用程序运行它,你可以关闭Excel在您的用户,或在一个服务也关闭正在运行的Excel实例通过一些其他程序.

编辑:有关更多信息,请参阅this question.

猜你在找的Windows相关文章