C# .Net アプリケーションから開始した Excel プロセスを停止するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2340663

質問

C# .Net アプリケーションから Excel を実行していますが、プロセスをシャットダウンするのに問題があります。C# プログラムから Excel プロセスを正しくシャットダウンするにはどうすればよいですか?

役に立ちましたか?

解決

これを試してみてください

foreach (System.Diagnostics.Process process in System.Diagnostics.Process.GetProcessesByName("EXCEL"))
        {
            if (process.MainModule.ModuleName.ToUpper().Equals("EXCEL.EXE"))
            {
                process.Kill();
                break;
            }
        }

他のヒント

私はあなたの問題はシャットダウンからExcelのプロセスを防止COM参照をダングリングによって引き起こされることを99%の一定程度です。それは透過的に自分のハンドルに取得し、それらを明示的にシャットダウンするようにあなたの手段を与えることなくCOM参照を生成する傾向があるとして、Excelはこれに特に傾向があります。

あなたが明示的に彼らはそれを行う作る場合を除き、

のPIAは、彼らがクリーンアップしていないことを基本的なCOMオブジェクトへの参照の独自のセットを作ることによって、この問題を配合します。 PIAの通過エクセルでの作業はまさにこの理由のため、非常に手間のかかるです。

Application.Quit()(IIRCこれは、それが呼ばれるものである)の のプロセスダウンを終了します参照がすべて正しくクリーンアップされている場合。あなたは慎重にExcelのプロセスにCOM参照を保持しているもののライフサイクルを管理し、すべてのCOM参照が適切にクリーンアップされていることを確認するために持っていることをこれが意味。

Application app = new Application();
...
EndTask((IntPtr)app.Hwnd, true, true);

[DllImport("user32.dll")]
public static extern bool EndTask(IntPtr hwnd, bool shutdown, bool force);

ニーズに応じて、次の使用を検討してください。 .NET 用スプレッドシートギア これにより、COM 相互運用機能のない Excel 互換コンポーネントが得られます (インスタンスのハングがなく、パフォーマンスが向上し、Excel がインストールされているかどうか、または Excel のバージョンがインストールされているかを気にする必要がありません)。

C# および VB ソースを使用したライブ ASP.NET サンプルを確認できます。 ここ, 、SpreadsheetGear の Windows フォーム コントロールとサンプルの詳細をご覧ください。 ここ, 、無料試用版をダウンロードしてください ここ 自分で試してみたい場合。

免責事項:私は SpreadsheetGear LLC を所有しています

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top