加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 04:34:35 所属栏目:Windows 来源:网络整理
导读:我有一个 Windows服务,通过Microsoft.Office.Interop.Excel.Application对象打开一个Excel电子表格. Application xlApp = new Application();Workbook workbook = xlApp.Workbooks.Open(fileName,2,false);......workbook.Close();xlApp.Quit(); 在完成工作
我有一个 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读