2011-01-07 6 views
0

私のアプリケーションは、ウィンドウフォームに埋め込まれたwinwordの新しいインスタンスを作成します。Winwordの特定のインスタンスを終了する

new Microsoft.Office.Interop.Word.ApplicationClass() 

ユーザーが編集を終了すると、ウィンドウを閉じますが、winwordインスタンスはまだバックグラウンドで実行されています。

どのように特定のインスタンスを強制終了できますか?私はマシン上で実行されているすべてのインスタンスを強制終了する方法を知っていますが、これはオプションではありません。

+1

何も使用して終了インスタンスは、Aがある場合ユーザーのドキュメントは別のウィンドウで開きますか? – Gabe

+0

それは私が作成したインスタンスの中から新しい文書を作成しないことを知っているので、ほんの数人のユーザーだけで社内アプリケーションです。しかし、彼らは私の窓のフォームの外で別に開いている場合は、私はそれを閉じることはできません – user48408

+0

可能な複製[interopのCOMオブジェクトをぶら下げの問題](http://stackoverflow.com/questions/4503309/problem-with-hanging-interop -com-objects) –

答えて

1

あなたはあなたのコードでは

application.Quit() 

を呼び出す必要があります。私は私のシステムでなければならなかった

ことの一つは、(それがExcelの処理ツールです)終了物事はまだ起こっていた後の処理があれば殺すんです。

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

applicationはあなたのWord ApplicationClassのインスタンスです – turtlepick

+0

しかし、application.Quit()があなたのために完全な仕事をしなかった場合、あなたはExcelのすべてのインスタンスを強制終了しましたか?私はそれをすることはできません – user48408

+0

あなたはおそらくあなたの正確なもののインスタンスIDを取得し、それを殺さなければならないでしょう。 – turtlepick

1

これにはさまざまな方法があります(Marshal.ReleaseComObjectが私が信じる最も使用されています)。

私は、Officeアプリケーションのインスタンスを解放について公式ドキュメントを読んでください示唆しています。それはここから入手可能です:Microsoft .NET Development for Microsoft Office/Releasing COM Objects

+0

[OK]を感謝を助けるかもしれません。後で返信します – user48408

0

は、私はあなたが/ Flaviotsfの回答に次のコードを追加組み合わせる提案する - 実際のプロセスは、実行上にあるかを決定します:

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(); 
    } 
} 
関連する問題