2011-12-13 101 views
6

我正在用c#創建一個excel應用程序。 因爲我會保持緊急的excel文件,我想保持它的處理程序打開。 我想保留excel進程ID,這樣我就可以殺死它,以防系統崩潰。獲取Excel應用程序進程號

創建時如何獲得Excel Pid?

+0

你就可以開始告訴我們如何創建/打開Excel ?請顯示一些代碼 –

+1

你需要什麼PID的?你可以自己發佈Com對象 – Shai

回答

-2

這裏有一個如何打開使用Excel的互操作一個Excel文件,並妥善處理實例 (來源:谷歌)爲例

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(); 
    } 
+0

爲什麼downvote?只是好奇.. – abhilash

+0

擊敗我!此代碼示例是100%正常工作... – Shai

+0

可能是downvoted,因爲它不回答問題!如果Excel出去吃午餐,它經常做的事情,釋放你所有的參考是不會殺死它的。你需要進程ID。 –

22
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); 
    } 
} 
+0

很好,謝謝! – Belial09

相關問題