VB.net での エクセルのプロセス問題

アプリケーションで開いたエクセルを、ユーザーが閉じるのを待たなければいけない局面があります。

エクセルに書き込まれた内容を確かめてもらったりするばあい。

もしくは、書き込んでもらう時。

 

ループ内で、そのエクセルがあるかどうかをチェックして、なくなるのを待つように実装しました。

実装当時、開放しなくてもエクセルのプロセスは残りませんでした。

Windows10 になるまでは!

 

会社のPCがWindows10に移行してからしばらくして、

プロセスが残っていることに気づきました。

仕方がないので、エクセルのBeforeCloseのイヴェントをとらえて、

その中でプロセスの開放処理を書いたのですが、

 

社内システムのアプリの更新をかけた後に、

エラーが出ているとの報告が。

ログをチェックすると、いらなくなったエクセルのファイルを削除しようとしたときに、別のプロセスが使用中で削除できなくなっていました。

閉じたエクセルが、タイミングによって解放されずにぶつかってしまったようです。

 

GC.Collect() でガーベッジコレクションをクリアすることで解消することができました。