2011-01-07 12 views
0

Meine Anwendung erstellt eine neue Instanz von WinWord in einem Windows-Formular eingebettet.Töten bestimmte Instanz von Winword

Sobald der Benutzer die Bearbeitung beendet, schließe ich das Fenster, aber die Winword-Instanz läuft immer noch im Hintergrund.

Wie kann ich diese bestimmte Instanz töten? Ich weiß, wie man alle Instanzen, die auf einer Maschine laufen, killt, aber das ist keine Option.

+1

Was passiert, wenn die Instanz, die Sie auch eine hat mit gelandet Benutzerdokument in einem anderen Fenster geöffnet? – Gabe

+0

Es ist eine In-House-Anwendung mit nur wenigen Benutzern, so dass sie wissen, dass sie keine neuen Dokumente aus der Instanz erstellen müssen, die ich für sie erstellt habe. Aber wenn sie Wort getrennt außerhalb meines Windows-Formulars geöffnet haben, kann ich es nicht schließen – user48408

+0

mögliche Duplikate von [Problem mit hängenden Interop-COM-Objekten] (http://stackoverflow.com/questions/4503309/problem-with-hanging-interop -com-Objekte) –

Antwort

1

Sie benötigen

application.Quit() 

In Ihrem Code zu nennen.

Eine Sache, die ich hatte auf meinem System zu tun (es ist ein Excel-Bearbeitungswerkzeug) ist ein Prozess Kill tun, wenn, nachdem die Dinge Quit noch würden.

var openedExcel = System.Diagnostics.Process.GetProcessesByName("EXCEL"); 
      if (openedExcel.Any()) 
      { 
       foreach (var excel in openedExcel) 
       { 
        try { excel.Kill(); } 
        catch { } 
       } 
      } 
+0

, wenn die Anwendung die Instanz des Word-ApplicationClass ist – turtlepick

+0

Aber wenn Application.Quit() hat die Stelle nicht für Sie tun gegriffen Sie alle Instanzen von Excel zu töten? Ich kann das nicht tun – user48408

+0

Sie müssten wahrscheinlich die Instanz-ID Ihres genauen eins und Töte es. – turtlepick

0

Ich schlage vor, Sie kombinieren/fügen Sie den folgenden Code zu Flaviotsf Antwort - das ist, was eigentliche Prozess auf der Flucht ist, wird bestimmen:

Process[] myProcList = Process.GetProcesses(); 
for (int i = 0; i <= myProcList.Length - 1; i ++) { 
    string strProcessName = myProcList [i].ProcessName; 

    string strProcessTitle = myProcList [i].MainWindowTitle(); 
     //check for your process name. 
    if (strProcessName.ToLower().Trim().Contains("access")) { 

     myProcList [i].Kill(); 
    } 
} 
Verwandte Themen