Feedback

C# - Excel Prozess schließen (Original von Andy Nikolov)

Veröffentlicht von am 7/3/2009
(2 Bewertungen)
Das ist eine Übersetzung des Snippets "Excel Prozess schließen" (VB) von Andy Nikolov in C#. Mit Erlaubnis von Andy nun hier also meine Version.

Originalbeschreibung :
"An diesem Problem ist schon manch einer verzweifelt:
Man hat eine Excel Application geöffnet (VB.NET oder C-Sharp), nach dem Beenden jedoch bleibt im Task Manager der Prozess immernoch Aktiv.

Eigentlich sollte eine Excel Application mit XLSApp.Close oder XLSApp.Quit mit anschließendem

System.Runtime.InteropServices.Marshal.ReleaseComObject(XLSApp)
GC.Collect()

schließen. Tut Sie aber leider nicht.


Mit diesem Snippet wird ein für alle Mal der spezielle Excel Prozess beendet, OHNE alle anderen Excel Prozesse mit in den Abgrund zu reißen.

Sicherlich ist diese Funktion auch für andere Bereiche interessant..."
//http://dotnet-snippets.de/dns/excel-prozess-schliessen-SID1153.aspx

// use user32.dll
[System.Runtime.InteropServices.DllImport("user32.DLL")]
        public static extern IntPtr GetWindowThreadProcessId(int hWnd, ref IntPtr lpdwProcessID);

        /// <summary>
        /// kills an Excel application
        /// </summary>
        /// <param name="myExcelApp">The application to kill</param>
        public static void killExcelInstanceById(ref Microsoft.Office.Interop.Excel.Application myExcelApp)
        {
            IntPtr processID = new IntPtr() ;
            
            //API Funktion, out val: processId
GetWindowThreadProcessId(myExcelApp.Hwnd, ref processID);

            System.Diagnostics.Process myExcelProcess = System.Diagnostics.Process.GetProcessById(processID.ToInt32());
            
            // kill it!
            myExcelProcess.Kill();
        }

1 Kommentare zum Snippet

RoSi schrieb am 9/4/2010:
Ich erlaube mir an dieser Stelle wegen der Einleitung nochmals den Hinweis, dass System.Runtime.InteropServices.Marshal.ReleaseComObject(XLSApp) einen Integer zurückliefert und solange der > 0 ist, muss diese Methode erneut für das zu lösende Objekt aufgerufen werden.
 

Logge dich ein, um hier zu kommentieren!