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]

ASP.NET Core und Angular Komplett für .NET-Entwickler

Sie  lernen in drei (3) Tagen wie man mit  ASP.NET Core und den Technologien  MVC, Entity Framework, WebAPI und  Razor professionelle sowie moderne  Web-Anwendungsarchitekturen aufbaut.  Die Schulung ist der perfekte  Einstieg um insbesondere datengetriebene  und präsentationsorientierte  Applikationen auf Basis der robusten und  skalierbaren ASP.NET Core  Plattform zu erstellen. Nach der Veranstaltung kennen Sie die Konzepte von Angular und können Angular in neue und bestehende ASP.NET-Anwendungen einsetzen.

C# 2017/2015/2013 Aufbau

In dieser Schulung lernen Sie fortgeschrittene Techniken im Bereich .Net C#. Dabei stehen neben den eigentlichen Techniken auch architektonische Aspekte im Mittelpunkt.

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