トップ回答者
Excelを複数回起動するとバックグランドに残る

質問
-
■PC環境
Windows 10 Enterprise 2016 LTSB 64ビット
Excel 2016 MSO (16.0.4266.1001) 64ビット(ボリュームライセンス)
CPU:Xeon E5-1603 v3 @ 2.80GHz
メモリ:8GB
■現象
Excelの起動と終了を複数回繰り返すと、バックグランドプロセスにExcelが残る様になり
バックグランドに残ったExcelのCPU負荷率が増加する。
この現象は起動回数を重ねるごとに顕著となる。
・起動回数約2000回 → CPU負荷率が約15%で、バックグランドから消えるまで約5秒。
・起動回数約3000回 → CPU負荷率が約25%で、バックグランドから消えるまで約15秒。
・起動回数約13000回 → CPU負荷率が約25%で、バックグランドから消えるまで約700秒。
PCを再起動しても改善せず、再起動後の1回目のExcel起動から同現象となる。
この現象は同PCでの別ユーザーアカウントへは影響しない。
但し、別ユーザーアカウントでも複数回起動すれば同現象となる。
■効果がなかった対策
・Excel再インストール
・Windowsクリーンインストール
・Excelオプションで【Excelアドイン】、【COMアドイン】のチェックを全て外す
・PCをクリーンブート
・Excelをセーフモードで起動
■その他情報
・C:\Users\<User名>\AppData\Roaming\Microsoft\Excel や ~\XLSTART のフォルダーは空である。
・Excel以外のOfficeアプリケーション、その他アプリケーションはインストールしていない。
・ウイルス対策ソフトウェアはインストールしていない。
■応急処置
同PCでハードディクスをフォーマットし、Windowsをクリーンイントールして
Excel 2013 SP1をインストールした環境では、本件の現象は発生しなくなる。■検証方法
原因究明のために、同PCのハードディスクをフォーマットしてWindowsを
クリーンインストールし、Excel 2016のみをインストールした状態で検証を開始。
検証はVisual Studio 2015で単純にExcelを起動して終了するだけを繰り返す
ソフトウェアを作成して、これを実行させている。- 編集済み rasta_ms 2017年11月2日 4:33
回答
-
Office のサーバーサイド オートメーションについてという文書があります。この文書そのものはサーバーサイドでの使用をサポートしていない旨を明示するものですが、その中で
無人で実行されるように設計されたサーバーサイド コンポーネントのニーズを満たす必要があるレベルの再入機能またはセキュリティは提供していません。
といった記述があります。何千回も起動・終了を繰り返す行為は、有人・手動では想定できず、サポート外の操作という判断をされるかもしれません。
さて質問者さんは何を目的として起動・終了を繰り返したのでしょうか? 別のアプローチを模索した方がいいかもしれません。
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年11月6日 4:59
- 回答としてマーク 立花楓Microsoft employee, Moderator 2017年11月13日 4:33
すべての返信
-
Office のサーバーサイド オートメーションについてという文書があります。この文書そのものはサーバーサイドでの使用をサポートしていない旨を明示するものですが、その中で
無人で実行されるように設計されたサーバーサイド コンポーネントのニーズを満たす必要があるレベルの再入機能またはセキュリティは提供していません。
といった記述があります。何千回も起動・終了を繰り返す行為は、有人・手動では想定できず、サポート外の操作という判断をされるかもしれません。
さて質問者さんは何を目的として起動・終了を繰り返したのでしょうか? 別のアプローチを模索した方がいいかもしれません。
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年11月6日 4:59
- 回答としてマーク 立花楓Microsoft employee, Moderator 2017年11月13日 4:33
-
一日に三回起動すると、一年で千回を超えます。
非現実的な回数ではないと考えています。
横から失礼しますが、佐祐理さんの返信は「あくまで一例」としてサポート外と判断される可能性を書かれているだけだと思います。
回数云々が現実的かどうかは別として、佐祐理さんのご指摘は「バグに見えるかもしれませんが、サポート外と言われて手詰まりになる可能性が高い。そうなるくらいなら別の方法を模索しては?」というイメージだと思います。
(見当違いでしたら佐祐理さんスミマセン)
また、一つ試して見て頂きたい事が有ります。
「単純にExcelを起動して終了する」という所を下記に変更したらどうなるでしょうか?
//変数:comがExcelのインスタンス int count = 0; do { //多重参照等を考慮し、返り値が0になるまで実行する count = Marshal.ReleaseComObject(com); } while (count > 0);
単純に参照が無くなるまでReleaseを繰り返すだけですが、もしかしたら効果があるかもしれないと思いました。
※根拠は有りませんので、効果が出なかったらすみません。
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年11月6日 4:59
-
aviator__さんのコメントされている通り、別のアプローチを提案するものでした。
そして質問者さんが採られている起動方法が提示されていないので、aviator__さんの提案されているようなCOMインターフェースを使用しているかもわかりません。たとえばProcess.Start()には効果ありませんし。なので第三者からは何も提案できない状態との認識です。
そして「質問者さんは何を目的として起動・終了を繰り返したのでしょうか?」との問いに起動回数を答えるということは、質問者さんはExcelの起動・終了に人生をかけて、1日3回、13年後の2030年までひらすら起動・終了を繰り返したいということでしょうか?
-
一日に三回起動すると、一年で千回を超えます。
非現実的な回数ではないと考えています。一年間、一度もシャットダウン・再起動せずに、ずっと毎日続けるということが、ビジネスユース・コンシューマーユースともにあり得ない領域だと位置づけられると思いますので、そういったへりくつ路線はやめましょう。
どうしても、「なんとかしろ!」という論調で解決を求めていきたいなら、Microsoft の有償サポートに尋ねてください。
このフォーラムはサポートサービスではありません。
ユーザー同士の情報交換フォーラムなので、あなた自身がシナリオやソースコードなどを提示して回避策の意見を募るとか、そういった積極性がないと、この後の進展はありません。