none
C# Excelのプロセスを破棄できない。 RRS feed

  • 質問

  • 過去の質問や回答を参考に最少コード(シートの操作をしない)を実行しても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(); } } } }



    2015年7月25日 2:57

回答

  • 私の環境

    Windows 8.1
    Excel 2013
    Visual Studio 2013
    では、Bookを作成するコードでもプロセスは残りませんでした。

    プロセスが残るのは、セキュリティソフトが関係するかもしれません。
    ちなみに、お馬鹿様によると「セキュリティ ソフトの影響を検証するのであれば、アンインストールした状態で…」との事です。

    ループ内でのSystem.Diagnostics.Process.Startについて

    • 回答としてマーク bakabon88 2015年7月25日 6:27
    2015年7月25日 4:32

すべての返信

  • 私の環境

    Windows 8.1
    Excel 2013
    Visual Studio 2013
    では、Bookを作成するコードでもプロセスは残りませんでした。

    プロセスが残るのは、セキュリティソフトが関係するかもしれません。
    ちなみに、お馬鹿様によると「セキュリティ ソフトの影響を検証するのであれば、アンインストールした状態で…」との事です。

    ループ内でのSystem.Diagnostics.Process.Startについて

    • 回答としてマーク bakabon88 2015年7月25日 6:27
    2015年7月25日 4:32
  • hihijijiさんこんにちは。 早速検証下さりありがとうございました。 > Bookを作成するコードでもプロセスは残りませんでした。ですよね。。。それが正常なんですよね。 セキュリティソフトを「一時無効」にしてもダメでした。 現在の環境問題を切り分けていく気力が私にはありませんので Windows 10 クリーンインストール実験を予定していますのでそこで検証してみます。 私の環境の問題だと分かりました orz ありがとうございます。
    2015年7月25日 4:57
  • 既に終わってるようですが・・・。

    うちの環境も OS とか違いますが、問題なかったです。

    しかし、気になる違いが・・・。

    Microsoft Excel 15.0 Object Library のファイルバージョンが 15.0.4737.1000 ではなく 15.0.4737.1001 でした。

    このファイルバージョン変更は滅多にないと思うのだけど・・・。


    2015年7月25日 11:09