2016年1月11日月曜日

Excelゾンビの殺し方

C#上でExcelを開いたりすると、Excelのプロセスが残る場合がありますね。
メモリを解放、GC等を適切に処理しないと起こる現象です。
なので、プログラムからExcelを使う場合、Excelファイルに書き込んで保存するのが一般的な方法です。
しかし、ファイルに保存するのが嫌だ、ファイル名与えたりするのも面倒くさい。
そのまま、Excelのウィンドウを開いて、表示したいという方もいるはず。
しかし、そういう構造でプログラムを組む場合、該当のExcelプロセスの管理をプログラム側がする必要があります。
Excelのウィンドウを開いたまま、プログラムを閉じた場合、管理外になってしまうしぁ。
開いたら開きっぱなし、という構造にすると、Excelのプロセスが残って、Excelゾンビってのになってしまう。

寝る前に思いついた邪道な方法を公開します。
ムチャクチャですよ。
プログラミング的に正しいのか、わかりませんが。
効果はあります。

プロセスの中のExcelでウィンドウのタイトルが無いのが、ゾンビです。
だったら、そのプロセスをKillしてしまえば良いじゃん。

foreach (System.Diagnostics.Process clsProcess in System.Diagnostics.Process.GetProcesses())//すべてのプロセスを一個ずつ見て
{
     if (clsProcess.ProcessName.Equals("EXCEL"))//プロセスの名前がExcelの物がある場合、
     {
          if (clsProcess.MainWindowTitle == "")//該当プロセスのメインウィンドウのタイトルが無い場合
          {
               clsProcess.Kill();//該当プロセスを終了してください。
          }
     }
}

どうでしょう。
これで、Excelゾンビプロセスは終了が出来ます。
ネットで調べたけど、この方法を紹介してる人は居ませんでしたね。
邪道ですね。こんなの思いつくの、最低のプログラマーだけですね。ふふふ。

副作用はあると思うので、用法はよく考えて使って下さい。

0 件のコメント:

コメントを投稿