Momentan schlage ich mich mit einem lästigen Problem herum: Der Webserver unseres in der Entwicklung befindlichen, ASP.NET / AJAX – basierenden Projektmanagement-Systems soll eine Excel-Datei erstellen. Dafür benutzen wir momentan tatsächlich ein auf dem Server installiertes Excel (ist ja nur im Intranet…), angesteuert über die .NET-Com-Interop – Schnittstelle.
Das Problem: Die Excel-Application bleibt hartnäckig am Leben, trotz Schließens aller aktiven Workbooks, Aufruf von Application.Quit und Einsatz von System.Runtime.InteropServices.Marshal.ReleaseComObject bist zum Ref-Count 0. Seltsamer Weise tritt das Phänomen aber anscheinend nur auf dem Produktivsystem (Windows Server 2003, IIS 6, Office 2003) auf, auf dem Enwicklungsrechner (Windows XP, IIS 5.1, Office 2003) verschwindet Excel nach getaner Arbeit wie gewünscht aus dem Speicher.
Hat jemand zufällig eine Idee, wo hier das Problem – oder noch besser: Die Lösung – liegen könnte?

mach es innerhalb einer appdomain auf. Assemblys kann man so nicht explizit entladen
Sind auch wirklich alle Excel-Objekte geschlossen? Wenn z.B. über Workbook.Worksheets[i] auf ein Worksheet zugegriffen wird, ist implizit auch ein Sheets-Objekt erzeugt worden, dass über ReleaseComObject entfernt werden muss.
Unter obigem Link gibt es meinen ExcelExporter zum Download, der sich um das alles kümmert.
Hatte mal das gleiche Problem.
1. Wie Daniel sagte: Kontrollier ob wirklich alle Referenzen auf die Excel-Objekte gelöscht sind.
2. Zwing den GC zum aufräumen: System.GC.Collect
Das hat bei mir funktioniert…
@Alle: Danke für die Tipps – werd mich dann gleich mal deren Evaluierung widmen
Evtl hilft ja auch dieser Weg:
http://dotnet-snippets.de/dns/Snippet_detail.aspx?=272
Habe auch eine komplette Applikation mit dem Schrott-Office geschrieben… Hatte dieselbe Probleme wie du…
Ich hatte die Applikation auch mit C# implementiert und nach einer Weile gemerkt, dass es ein Fehler war. Einige Funktionen wurden von den MS-Jungs in den Wrapper-Klassen falsch übersetzt. Also verwende den VB-Code und packe ihn in ein VB-Projekt, danach kannst du aus C# darauf zugreifen.
Auf dem IIS 6.0 machst du am besten ein eigenes Benutzerkonto (jaaa, effektiv unter der Benutzerverwaltung) und lässt die Office-Applikation respektive die Office-Komponente unter diesem Konto laufen. Zuerst musst du dich aber ein erstes mal unter diesem Konto anmelden, damit das Konto auch angelegt wird.
Unter den Komponenten-Diensten musst du bei zwei Dienste (vom Office) die Rechte richtig setzen.
Undundund… falls du aber explizit Hilfe brauchst schreib mir ein Mail
Apropos beim Schliessen der App, immer zuerst das Dokument schliessen und dem Quit-Handler auch die Null-Variabeln übergeben…
cu
Wir haben uns zu einem noch simpleren Weg entschieden: Wir erstellen keine Excel-Datei mehr, sondern ein HTML-File. Ist simpler und schneller
Trotzdem danke für die Tipps.