DAO・ADO・OLE-DB 3種混合


 Visual Basic とか、Visual C++ でデータプログラミングをするとき、あるいはそうして作られたソフトウエアを使うとき、または Microsoft Access 2000 (97も?)を使うときなど、マイクロソフトの Data Access Object (DAO)なるものを必要とすることがある。
 文月(MC4)には、Win98SEクリーンインストール時からこのパッケージが導入されていた。Win98SE自体がそういう仕様なのかも知れないが、Program FilesフォルダにADOとかDAOとか、そんな名前のフォルダが在ったときのを見つけたときには「何で」と感じてしまった。確かに、IEやOLEの延長線上にある技術ではある。しかし、必須であろうか? 特に IE5を消してしまった今となっては、更に必要性を感じない。
 かといって簡単にアンインストールできるようなら、とりわけこんなコーナーも設けなかったのだが、DAOパッケージに関するものがアプリケーションの追加と削除に載っていなかったので、手段を講じることにした。

 ではどうやって削除しようか。ドライブ内にあるファイルを1つ1つ調べていって、消すしかないのだろうか。

 実は DAO はランタイムライブラリのインストーラが、マイクロソフトのサイトで提供されている(マイクロソフト・データアクセスコンポーネント=MDAC)。これを「うまく」使えば、導入されている DAO ファイル群を削除できそうだ。
 単純に考えると、一旦 DAO ライブラリを上書き導入して、すぐアンインストールすれば、DAO ファイル群を一掃できそうだが、もし、このインストーラが「賢い」と、アンインストール時にそれまで導入されていたファイルを戻してしまうかもしれない。ちょうどIEのアンインストールのように。それでは意味がない。
 要は MDAC でどんなファイルが導入されるかわかればよいのだ。ダウンロードしてきたセットアッププログラムにどんなファイルが含まれるかを調べよう。セットアッププログラムを実行し、ソフトウエア使用条件の画面でエクスプローラを起動し、c:\windows\tempを覗くと、できたてのフォルダがある。これが、セットアッププログラムから展開された DAO ライブラリのファイルだ。

 上記ファイルのうち、mdacone.cab、mdactwo.cab、mtxfiles.cabに、DAO関係のファイルが入っているのであろう。mrvcrt、oleaut、その他dllはDAOには直接関係のないシステムファイルなので、今回は無視する。
 dasetup.iniを見てみると、
...
[MDACONE]
Name=Microsoft Data Access Components (1 of 2)
InstallType=inf
CABFile=MDACONE.CAB
INFFile=MDACONE.INF
InstallSection=DefaultInstall
InstallSection.NT=DefaultInstall.NT
ExtractCab=1
RebootAfter=0
...

のように、各cab書庫の同名infファイルをインストールに使っているようだ。
 mdacone.infの[DestinationDirs]セクションに導入先フォルダの指示があった。次のように置き換えて読めばよいだろう。

    INFDIR → c:\windows\inf
    SYSTEMDIR → c:\windows\system
    SYSDIRLOC → c:\windows\system
    W9XSYSTEM → c:\windows\system
    HELPDIR → c:\windows\help
    WINDIR → c:\windows

 転送ファイル名にはロングファイル名のものもあるが、ショートファイル名も記してあるのでそれを参考にして、infファイルのファイル名を機械的に置換して、ファイル削除用バッチを作成した。
 次にmdactwo.infによれば、このcab書庫内のファイルは全て c:\program files\common files\system以下に転送されるようなので、削除バッチで「deltree /y c:\program files\common files\system」を実行すればよい。
 最後にmtxfiles.infにある2ファイルの記述を削除バッチに書き込み、完成だ。実行してみよう。

 DirectXを削除したときの当初プランのように、

の手順を実行してみた。regcleanでは23KBのレジストリファイルが書き出されたが、削除後の起動時やその後の運用に於いて不具合などは見られない(今のところは)。
 バッチ実行中、削除するファイルが一部見つからなかったが、参考にしたMDACのバージョン(MDAC SP1)や、当方の環境の特殊性(Helpフォルダがないなど)に起因するのだろう。最終的に削除バッチはこんな中身になった。

<<< DAODEL.BAT >>>

@echo off
ECHO DAO関係ファイルを削除します
PAUSE
C:

@echo on
CD \WINDOWS\INF
DEL mdacone.inf
DEL mdactwo.inf

CD \WINDOWS\SYSTEM
DEL odbcconf.rsp
DEL odbc32.dll
DEL odbccp32.dll
DEL odbccr32.dll
DEL odbccu32.dll
DEL odbcad32.exe
rem DEL ds16gt.dll
DEL odbc16gt.dll
rem DEL ds32gt.dll
DEL odbc32gt.dll
DEL odbctrac.dll
DEL odbcconf.exe
DEL 12520850.cpx
DEL 12520437.cpx
rem DEL odbcconf.dll
rem DEL msdart32.dll
DEL sqlwoa.dll
DEL sqlstr.dll
DEL sqlwid.dll
DEL odbcbcp.dll
DEL cliconfg.exe
DEL dbmsrpcn.dll
DEL dbmsspxn.dll
DEL dbnmpntw.dll
DEL dbmssocn.dll
DEL instcat.sql
DEL dbmsvinn.dll
DEL vfpodbc.dll
rem DEL msjtes40.dll
DEL vbajet32.dll
rem DEL expsrv.dll
DEL msjet40.dll
DEL msjter40.dll
DEL mswdat10.dll
DEL msrd3x40.dll
DEL msrd2x40.dll
DEL msrepl40.dll
DEL msexcl40.dll
DEL msexch40.dll
DEL msltus40.dll
DEL mspbde40.dll
DEL mstext40.dll
DEL msxbde40.dll
DEL odbcjt32.dll
DEL oddbse32.dll
DEL odexl32.dll
DEL odpdx32.dll
DEL odtext32.dll
DEL odfox32.dll
DEL msjeto~1.dll
rem DEL msdatsrc.tlb
rem DEL redist.rsp
DEL odbcint.dll
DEL odbccp32.cpl
DEL sqlsrv32.dll
DEL msorcl32.dll
DEL msjint40.dll
DEL odbcji32.dll
DEL mswstr10.dll
DEL mscpxl32.dll
DEL cliconfg.DLL
DEL sqlsodbc.hlp
DEL cliconf.hlp
DEL dbmsadsn.dll
rem DEL msdamg9x.dll
DEL dbmsshrn.dll
rem -------------
rem - MTX files -
rem -------------
DEL MTXOCI.DLL
DEL MTXDM.DLL

CD \WINDOWS
rem DEL msdfmap.ini

DELTREE /Y C:\PROGRA~1\COMMON~1\SYSTEM

CD \
ECHO 完了





indexへ戻ります