トップ回答者
C# Excelのプロセスを破棄できない。

質問
-
過去の質問や回答を参考に最少コード(シートの操作をしない)を実行してもExcelのプロセスを破棄できませんでした。
参考 : https://social.msdn.microsoft.com/Forums/ja-JP/0f210f52-3667-4e66-9dd6-4480eede48de/c-excel-exe?forum=csharpgeneralja
調べるとExcelのプロセスが残る現象は環境により再現性がまちまちのようでなんとも厄介な現象であることがわかりました。
このコードが私の環境だけであれ再インストール等の対応を検討しようと思います。
皆さんの環境ではこのコードでプロセスを破棄できますでしょうか。
コード自体が間違っているようであればご指摘をお願いします。
よろしくお願いします。
【実行環境】
Windows 8.1
Excel 2013
Visual Studio Comunity 2013
【Visual Studio で実行した手順】
新規プロジェクト > Windows フォームアプリケーション
参照の追加 > Com > Microsoft Excel 15.0 Object Library バージョン 1.8 ファイルバージョン 15.0.4737.1000
フォームにボタンを1つ配置
【Bookを作成しなければプロセスは破棄された】
using System; using System.Windows.Forms; using System.Runtime.InteropServices; using Microsoft.Office.Interop.Excel; namespace ExcelTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Microsoft.Office.Interop.Excel.Application xlApplication = null; Workbooks xlBooks = null; try { xlApplication = new Microsoft.Office.Interop.Excel.Application(); xlBooks = xlApplication.Workbooks; xlApplication.Quit(); } finally { Marshal.ReleaseComObject(xlBooks); Marshal.ReleaseComObject(xlApplication); GC.Collect(); } } } }
【Bookを作成するとプロセスは破棄できなかった】
using System; using System.Windows.Forms; using System.Runtime.InteropServices; using Microsoft.Office.Interop.Excel; namespace ExcelTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Microsoft.Office.Interop.Excel.Application xlApplication = null; Workbooks xlBooks = null; Workbook xlBook = null; try { xlApplication = new Microsoft.Office.Interop.Excel.Application(); xlBooks = xlApplication.Workbooks; xlBook = xlBooks.Add(string.Empty);
xlBook.Close(); xlApplication.Quit(); } finally { Marshal.ReleaseComObject(xlBook); Marshal.ReleaseComObject(xlBooks); Marshal.ReleaseComObject(xlApplication); GC.Collect(); } } } }