Office Automation の使用時にハングした Office プロセスを確認する
-
08-06-2019 - |
質問
Microsoft Officeプロセス(つまり、Word、Excel) が Office Automation の使用中にハングアップしましたか?また、プロセスがハングした場合、プロセスを終了する方法はありますか?
解決
まず最初に断っておきますが、サーバー上のサービスでこれを行うことはお勧めしませんが、質問には全力でお答えします。
サービスとして実行するとクリーンアップが難しくなります。たとえば、サービスとして実行しているものでは、ハングした Word や Excel を殺しても生き残れます。サービスを強制終了しなければならない場合もあります。Word や Excel がこの状態になった場合、サービスは停止しますか。
ハングしているかどうかをテストしようとする場合の問題の 1 つは、サービスが実行中の Word インスタンスがハングしたままであるにもかかわらず、テストによって Word の新しいインスタンスが起動して動作する可能性があることです。
ハングしているかどうかを判断する最良の方法は、実行すべきことを実行するように要求し、その結果を確認することです。実際に何をしているのかをもっと知る必要があります。
クリーンアップ用のバッチ ファイルで使用するコマンドをいくつか示します (両方ともパスに含まれている必要があります)。
- sc stop servicename - servicename という名前のサービスを停止します
- sc start servicename - servicename という名前のサービスを開始します
sc query servicename - サービス名のステータスをクエリします。
taskkill /F /IM Excel.exe - Excel.exe のすべてのインスタンスを終了します。
他のヒント
数年前にこれを行ったことを覚えています。つまり、Office XP または 2003 時代のことであり、2007 ではありません。
明らかに、最近の自動化のためのより良いソリューションは、System.IO.Packaging 名前空間を使用して docx などを記述する新しい XML 形式を使用することです。
当時、私は、MSWord が使い果たされて「Dr.」と呼ばれるプロセスが実行されるたびに気づいていました。ワトソン」がマシン上で実行されていました。これが、Word がつまずいて転倒したことを示す最初の手がかりでした。場合によっては複数見えることもあります WINWORD.EXE, 、しかし、私のコードはただ良い医者をスキャンするために使用されていました。それを(コードで)見たとき、私はすべてを殺しました WINWORD.EXE 善良なドクター自身を処刑し、ワードを拷問するプロセスを再開しました :-)
何を探すべきかについてのヒントが得られることを願っています。
ではごきげんよう、
ロブ・G
追伸下手をすれば、私のアーカイブからコードを見つけ出すこともできるかもしれません。
後半については答えられます。コード内にアプリケーション オブジェクトへの参照がある場合は、単に「Quit」を呼び出すことができます。
private Microsoft.Office.Interop.Excel.Application _excel;
// ... do some stuff ...
_excel.Quit();
ハングしたプロセスを確認するには、アプリケーションからデータを取得して、適切な時間枠内で結果が得られるかどうかを確認することになると思います (タイマーや他のスレッドなどをチェックインする)。おそらくもっと良い方法があるでしょう。