C# Outlook 2007 COM-interop-Anwendung nicht verlassen!
Irgendwelche Ideen, warum der folgende code nicht beenden von Outlook 2007 erstellten Prozess über COM-interop?
Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
var item = app.Session.OpenSharedItem("C:\\test.msg") as Microsoft.Office.Interop.Outlook.MailItem;
string body = item.HTMLBody;
int att = item.Attachments.Count;
(item as Microsoft.Office.Interop.Outlook._MailItem).Close(Microsoft.Office.Interop.Outlook.OlInspectorClose.olDiscard);
System.Runtime.InteropServices.Marshal.ReleaseComObject(item);
(app as Microsoft.Office.Interop.Outlook._Application).Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
System.Diagnostics.Debugger.Break();
Ein fast identisches snippet mit Word arbeitet, so Frage ich mich, ob ich vergessen zu bereinigen, etwas...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie eine 3rd-COM-Objekt referenziert, die in Ihrem code:
app.Session
. Dies muss sich auch korrekt freigegeben. Versuchen Sie, diesen code:Ich weiß nicht, die Besonderheiten der Office-COM-Interops, aber hier ist etwas code, vorgeschlagen von einem MSDN-Artikel. Er schlägt vor, die Doppel-sammeln/warten und clearing der Hinweise hilft bei der RCW-wrapper-Bereinigung.
Dass die url jedoch auch nahe
dem würde ich persönlich dringend abraten, wenn Sie Ihr helfen können, da hast du im Grunde nur zerstört, dass RCW für Ihre Anwendungsdomäne (wie der Artikel Punkte out).
[Edit: Auch die .Net-garbage-collector verhält sich ganz anders, wenn innerhalb eines Debuggers vs release-code, so testen Sie dieses außerhalb der debugger ist sehr wichtig]
Versuchen Sie stattdessen, es für mich funktioniert, wird es ein paar Sekunden Verzögerung, bevor es geht:
Versuchen Sie folgenden nach der app.Quit();