- 締切済み
Access2000のプロセスが残る
Access2000のプロセスが残る こんにちわ、いつもお世話になってます。 実行環境:WindowsXP Pro、Access2000、アプリ1(VB.NET作成) 開発環境:Windows7、Access2007、VB2008、アプリ1(VB.NET作成) VB.NET作成アプリはSQLサーバに情報を登録し 登録された情報をもとに印刷用テーブルを作成し Accessのマクロを起動させるプログラムです。 AccessはリンクテーブルでSQLサーバと接続され、 印刷用のレポートがあり、マクロはレポートを起動するものです。 プログラムは以下のような記述をしています。 ============================================ Dim oAcs As Access.Application oAcs = New Access.Application oAcs.OpenCurrentDatabase("C:\Print.mdb") oAcs.DoCmd.SetWarnings(False) oAcs.DoCmd.RunCommand(10) ' ウィンドウの最大化 oAcs.DoCmd.OpenForm("印刷") '印刷マクロ起動 oAcs.DoCmd.Maximize() ' 画面の最大化 oAcs.Visible = True AppActivate("Microsoft Access") oAcs.DoCmd.RunCommand(10) ' ウィンドウの最大化 ============================================ レポート表示後の印刷は自動ではないため Accessを起動したら起動しっぱなしになってます。 解放処理をしていないのでプロセスが残るのは既知です。 開発環境にてアプリ1を実行させAccessでレポートを表示させます。 Accessを終了してもプロセスが残りますがアプリ1を終了させると Accessのプロセスは終了します。 実行環境にて上記の同様の動作を行うと アプリ1を終了させてもプロセスが残ってしまう場合があります。 VB.NETで作成された同様のアプリからのAccess起動にも関わらず プロセスが残ってしまうのはAccessのバージョンとかが関係してるんでしょうか? 情報提供をお待ちしてます。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- piroin654
- ベストアンサー率75% (692/917)
レスが無いようなのですが、 oAcsをMarshal.ReleaseComObjectしないとプロセスは 残ります。プロセスが残るのはバージョンには関係 ないと思いますが。 Quit→オブジェクト解放 oAcs.Quit System.Runtime.InteropServices.Marshal.ReleaseComObject(oAcs) これに関するマイクロソフトのメッセージは以下 http://support.microsoft.com/kb/317113/ja ms access ReleaseComObject あるいは、 ms access Marshal.ReleaseComObject でググればかなりの資料がヒットします。
補足
piroin654さん、回答ありがとうございます。 プロセスが残るのは既知なので、それは修正する事になっています。 ただし、オートメーションではないので、Process.Startで実行するようにする修正方針です。 お聞きしたいのは 2台の環境の異なるPC上にて プログラム起動→ボタン押下→Access起動 →Accessいじる→Access終了→プログラム終了 という一連の動作を行った時、 Accessを終了した時点ではどちらの環境も Accessのプロセスは残っています。(解放してないから当然) ただ、プログラム終了後、 一方(XP、Access2000)はAccessのプロセスが残り もう一方(Win7、Access2007)はAccessのプロセスが残らない、 このように現象が異なるのはなぜか、その原因です。 続けてよろしくお願いします。