Get excel application process id

I am creating an excel application with C #. Since I will maintain the excel file urgently, I want to keep its handler open. I want to save the excel process id so that I can kill it in case of system failure.

How can I get Excel Pid when creating it?

+6
c # excel-interop
Dec 13 '11 at 2:08 a.m.
source share
2 answers
using Excel = Microsoft.Office.Interop.Excel; using System.Runtime.InteropServices; using System.Diagnostics; class Sample { [DllImport("user32.dll")] static extern int GetWindowThreadProcessId(int hWnd, out int lpdwProcessId); Process GetExcelProcess(Excel.Application excelApp) { int id; GetWindowThreadProcessId(excelApp.Hwnd, out id); return Process.GetProcessById(id); } } 
+22
Mar 21 '13 at 19:56
source share

Here is an example of how to open an Excel file using Excel-Interop and delete the instance correctly (source: google)

  Application ExcelObj = new Application(); Workbook WB = ExcelObj.Workbooks.Open(fileName, 0, true, 5, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, true, false, false); Sheets sheets = WB.Worksheets; Worksheet WS = (Worksheet)sheets.get_Item(1); Range excelRange = WS.UsedRange; ... (DO STUFF?) // Get rid of everything - close Excel while (Marshal.ReleaseComObject(WB) > 0) { } WB = null; while (Marshal.ReleaseComObject(sheets) > 0) { } sheets = null; while (Marshal.ReleaseComObject(WS) > 0) { } WS = null; while (Marshal.ReleaseComObject(excelRange) > 0) { } excelRange = null; GC(); ExcelObj.Quit(); while (Marshal.ReleaseComObject(ExcelObj) > 0) { } ExcelObj = null; GC(); public static void GC() { System.GC.Collect(); System.GC.WaitForPendingFinalizers(); System.GC.Collect(); System.GC.WaitForPendingFinalizers(); } 
-2
Dec 13
source share



All Articles