こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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のバージョンとかが関係してるんでしょうか?

情報提供をお待ちしてます。

投稿日時 - 2010-04-20 15:11:52

QNo.5839116

困ってます

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

レスが無いようなのですが、

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
でググればかなりの資料がヒットします。

投稿日時 - 2010-04-22 00:04:29

補足

piroin654さん、回答ありがとうございます。

プロセスが残るのは既知なので、それは修正する事になっています。
ただし、オートメーションではないので、Process.Startで実行するようにする修正方針です。

お聞きしたいのは
2台の環境の異なるPC上にて

プログラム起動→ボタン押下→Access起動
→Accessいじる→Access終了→プログラム終了

という一連の動作を行った時、
Accessを終了した時点ではどちらの環境も
Accessのプロセスは残っています。(解放してないから当然)
ただ、プログラム終了後、
一方(XP、Access2000)はAccessのプロセスが残り
もう一方(Win7、Access2007)はAccessのプロセスが残らない、
このように現象が異なるのはなぜか、その原因です。

続けてよろしくお願いします。

投稿日時 - 2010-04-22 10:08:56

あなたにオススメの質問