Feedback

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

Veröffentlicht von am 03.07.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..."
GFU-Schulungen  [Anzeige]

VB.NET 2017/2015/2013 Einführung

Das Seminar befähigt Sie zur eigenständigen Entwicklung von anwenderorientierten Programmen in VB.NET, worin auch der Einsatz von Datenbanken enthalten ist.

VB.NET 2017/2015/2013 Aufbau

Nach dieser Schulung können Sie mittels objektorientierter Modelle in VB.NET 2017/2015/2013 wiederverwendbare Elemente eigenständig erstellen.

//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 04.09.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!