Visual C++ 6.0アプリケーションの再頒布
David Schwartz
Visual C++ 6.0でのアプリケーション開発には、優れた開発環境というだけでなく、アプリケーションの実行とテストのための理想的な環境で作業を行えるという利点があります。しかし、ターゲット コンピュータにVisual C++ 6.0がインストールされていないと、アプリケーションのサポートに必要なファイルがないために、Visual C++ 6.0アプリケーションが動作しない可能性があります。
この記事では、Microsoft 32ビット オペレーティング システムを実行している任意のコンピュータ上でVisual C++ 6.0アプリケーションを動作させる方法について説明します。個々のVisual C++アプリケーション タイプの再頒布シナリオについて説明するだけでなく、任意のVisual C++ 6.0アプリケーションの依存関係を判断するのに役立つ一般的な再頒布手順についても説明します。
再頒布可能なファイルのリスト
Visual C++ 6.0の再頒布可能なファイルのリストについては、Visual C++ 6.0プロダクトCDのディスク1のCommon\Redist\Redist.txtを参照してください。ディスク1のルート フォルダにあるEula.txtにも、Redist.txtのカテゴリ名の定義を含む、ファイルの再頒布に関する情報があります。
Visual C++セットアップは、Windowsシステム フォルダにいくつかの再頒布可能ファイルをインストールすることがあります。これらのファイルを再頒布するときには、正しいバージョンのファイルが再頒布されるように、ハード ディスクからではなくVisual C++ 6.0プロダクトCDからディストリビューション ディスク イメージにコピーするようにしてください。
アプリケーションのデバッグ バージョンは再頒布不可能であり、各種のVisual C++ DLLのデバッグ バージョンはいずれも再頒布が禁止されていることに注意してください。
再頒布可能ファイルのバージョン チェック
ファイルの古いバージョンではなく新しいバージョンをインストールするようにすることが重要です。たとえば、古いバージョンの上に新しいバージョンのシステムDLLをインストールすることはかまいませんが、その逆は行ってはなりません。一般に、バージョン チェックはセットアップ プログラムの責任です。Visual C++ 6.0(Standard Editionを除く)とVisual Studio 6.0には、セットアップ プログラムの開発に使用できるバージョンのInstallShieldが付属しています。
独自のカスタム セットアップ プログラムを作成する場合には、再頒布可能ファイルのインストール時に、バージョンを手作業でチェックしなくてはなりません。この記事の先頭に、バージョン番号を、またファイルにバージョン番号がない場合にはタイム スタンプをチェックするサンプルへのリンクがあります。
バージョン チェックのプログラミング テクニックは、どのようなカテゴリのファイルを再頒布するかによって異なります。
- MFC DLLの場合は、Platform SDKに標準で付属しているバージョン チェックAPIを使用します。
- ODBCファイルの場合は、『ODBC Programmer's Reference』の"Installing ODBC Software" と"Configuring Data Sources"を参照してください。
バージョン チェックAPIと『ODBC Programmer's Reference』の詳細については、MSDN Libraryを参照してください。
再頒布するDLLの決定
アプリケーションがどのDLLに依存しているかを調べるには、Dependency Walker (Depends.exe)を使ってアプリケーションを開きます。Visual C++ 6.0にはこのユーティリティのバージョン1が付属していますが、この記事の先頭には、Dependency Walkerバージョン2のベータ3へのリンク(Alphaおよびx86)があります。
Depends.exeか、DUMPBINユーティリティの/DEPENDENTSオプションを使用すると、アプリケーションに静的にリンクされているDLLのリストと、アプリケーションの遅延ロードされるDLLのリストを見ることができます。
ActiveXコントロールなど、動的にロードされるDLLを調べるには、Depends.exeのプロファイリング機能を使用します。その後、アプリケーションを実際に使用して、すべてのパスを実行します。プロファイリング セッションを終了すると、Depends.exeは動的にロードされたDLLのリストを表示します。
DUMPBINまたはDepends.exeを使って依存ファイルを調べるときには、Redist.txtのファイル リストをもとに、どのMicrosoft提供のDLLが再頒布可能なのかを確認してください。
Depends.exeを使用するときには、DLLが別のDLLに、または特定のDLLの特定のバージョンに依存している可能性があるということに注意してください。Depends.exeは開発用のコンピュータでもターゲット コンピュータでも使用することができます。開発用のコンピュータでは、Depends.exeはアプリケーションのサポートに必要なDLLを報告します。ターゲット コンピュータ上でアプリケーションを実行したときに問題が生じる場合は、Depends.exe(および必要なDLL)をターゲット コンピュータにコピーし、Depends.exeでアプリケーションを開きます。Depends.exeは、アプリケーションのどのDLLが足りないのか、または間違ったバージョンのDLLが存在しているのかを報告します。
DLLを別のマシンにコピーするときには、既存のDLLを置き換えるようにコピーを行います。たとえば、Windows NTマシンでは、システムDLLはsystem32ディレクトリに置かれています。
Visual C++ ActiveXコントロールの再頒布
Visual C++ 6.0には、再頒布するアプリケーションの中で使用できるActiveXコントロールが付属しています。再頒布可能なVisual C++付属のActiveXコントロールのリストについては、Visual C++ 6.0プロダクトCDのディスク1のCommon\Redist\Redist.txtを参照してください。Os\Systemフォルダの中の.ocxファイルはすべて再頒布可能です。Visual C++のコンポーネントおよびコントロールギャラリでコントロールを強調表示すると、その.ocxファイルが表示されます。
アプリケーションを再頒布するときには、ActiveXコントロールの.ocxをインストールし、(Regsvr32.exeを使って)登録しなくてはなりません。さらに、ターゲット コンピュータに以下のシステム ファイルの最新バージョンが存在することを確認する必要があります(アスタリスクはファイルの登録が必要であることを示しています)。
- Oleaut32.dll *
- Olepro32.dll *
- Stdole2.tlb
- Asycfilt.dll
- Comcat.dll *
ターゲット コンピュータ上でVbrun60.exeを実行すると、これらのシステム ファイルをVisual Studio 6.0のバージョンにアップデートすることができます。Visual Studio 6.0用の最新ファイルを含んだバージョンのVbrun60.exeを入手するには、http://support.microsoft.com/supportで、ダウンロード可能ファイルのVbrun60.exeを検索してください。Vbrun60.exeを実行すると、Msvbvm60.dllもインストールされ、登録されます。しかし、このファイルはVisual C++アプリケーションの実行には必要ないので、登録を取り消して削除することが可能です。また、Dcom98(後述)を実行する場合には、アップデートされたシステム ファイルを入手できるので、Vbrun60.exeを実行する必要はありません。
アプリケーションが、データベースに接続するActiveXコントロールを使用している場合には、次の点に注意してください。
- Windows 95またはWindows 98コンピュータ上ではDCom98.exeを実行する必要があります。DCom98.exeは、Visual C++ 6.0プロダクトCDのディスク1のDcom98フォルダの中にあります。
- ターゲット コンピュータ上で、Microsoft Data Access SDKをインストールするために、Mdac_typ.exeを実行する必要があります。Mdac_typ.exeは、Visual C++ 6.0プロダクトCDのディスク2のMdac2フォルダの中にあります(Enterprise Editionのみ)。Mdac_typ.exeはダウンロードも可能です。http://www.microsoft.com/dataで、ダウンロード可能ファイルのMdac_typ.exeを検索してください。
データベースに接続するActiveXコントロールを使用する場合には、ターゲット コンピュータ上でデータ ソース名を再現する必要があります。これは、ConfigDSNなどの関数を使ってプログラム的に行うことができます。
一部の再頒布可能なActiveXコントロールには、さらに依存ファイルがあります。Visual C++のOs\Systemフォルダにある個々の.ocxファイルについて、.depファイルが用意されています。再頒布しようとしている個々の.ocxファイルについて、対応する.depファイルでUSESエントリがあるかどうかを確認してください。ここに、Vbrun60.exeに含まれていないファイルがリストされている場合には、そのファイルもターゲット コンピュータ上にインストールする必要があります。.ocxファイルを直接にサポートするDLLは、すべて登録する必要があります(Regsvr32.exeが実行に成功するためには、ターゲット コンピュータに、コントロールが静的にロードするすべてのDLLが含まれていなくてはなりません)。さらに、依存ファイルとしてリストされているDLLが、やはりOs\Systemフォルダに.depファイルを持っている場合には、その.depファイルでもUSESエントリを調べる必要があります。
Visual Studio Licensed Controls: Visual Studioライセンス取得者は、Visual Studioの他の開発ツールに固有のActiveXコントロールを再頒布することができます。たとえば、グラフ コントロールはVisual Basicに付属していますが、Visual BasicはVisual Studioの一部です。このため、Visual Studioライセンスの一部としてVisual C++を使用している場合には、グラフ コントロールを再頒布することができます。ただし、Visual C++だけを購入した場合には、グラフ コントロールの再頒布ライセンスはありません。
データベース サポート ファイルの再頒布
このセクションでは、DAOと、Microsoft Data Access SDKに含まれるデータベース テクノロジのサポート ファイルを再頒布する方法について説明します。
DAOサポート ファイルのインストール
DAOアプリケーションをサポートするのに必要なファイルは、次の2つの方法のどちらかでインストールすることができます。
- DAOのRedistバージョンを使用する。これはVisual C++ 6.0プロダクトCDのディスク1のDaosdk\Redistにあります。Daosdk\Redist\Disk1にあるセットアップ ファイルは、DAOアプリケーションのサポートに必要なファイルをインストールします。
- 必要なDAOサポート ファイルを手作業でインストールする。インストールし、登録する必要があるファイルについての情報は、ファイルDaosetup.rtfにあります。Daosetup.rtfはフル バージョンのDAO SDKをインストールしたときにインストールされます。DAO SDKをインストールするためのセットアップ ファイルはDaosdk\Retail\Disk1にあります。このバージョンのDAOは、コンピュータ上で実行されるDAOをサポートするだけでなく、DAOアプリケーションを開発するために必要なサポートも提供します。
DAO SDKをインストールするためには、ターゲット コンピュータに最新のシステム ファイルが必要です。このため、依然としてVbrun60.exeまたはDcom98.exeを実行する必要があるかもしれません。Dcom98.exeとVbrun60.exeの詳細については、この記事の前の方のセクション「Visual C++ ActiveXコントロールの再頒布」を参照してください。
Microsoft Data Access SDKサポート ファイルのインストール
ODBC、OLE DB、ADO、およびリモート データ サービスのサポートをインストールするには、Mdac_typ.exeを使用します。Mdac_typ.exeは、Visual C++ 6.0プロダクトCDのディスク2のMdac2フォルダの中にあります(Enterprise Editionのみ)。また、Mdac_typ.exeはダウンロードも可能です。http://www.microsoft.com/dataで、ダウンロード可能ファイルのMdac_typ.exeを検索してください。
MDAC_TYP /Qを使うと、サイレント インストールを行うことができます。
またWindows 95およびWindows 98コンピュータでは、最新のシステム ファイルを得るために、Dcom98.exeまたはVbrun60.exeをインストールしなくてはなりません。Dcom98.exeとVbrun60.exeの詳細については、この記事の前の方のセクション「Visual C++ ActiveXコントロールの再頒布」を参照してください。
MDAC_TYPの使い方に関するその他の情報については、以下のKnowledge Baseの記事を参照してください。
- Q167523: HOWTO: Redistributing DAO with Your Visual C++ 5.0 Application
- Q177913: HOWTO: Use the MDAC Standalone Setup EXE in Unattended Mode
- Q181126: INFO: Redistribution for MDAC 1.5 Components Available
- Q192009: HOWTO: Invoke Silent MDAC or DA SDK 2.0 Redistribution
Knowledge Baseの記事は、MSDN Libraryと http://www.microsoft.com/kb/ で見ることができます。
Webアプリケーションの再頒布
アプリケーションがWebBrowserコントロールをインプリメントしているMFCクラス(CHtmlViewやCHtmlEditViewなど)を使用している場合には、ターゲット コンピュータ上にMicrosoft Internet Explorer 4.0以降が少なくとも最小インストール以上でインストールされている必要があります。
Internet Explorerをインストールすることで、ターゲット コンピュータ上に最新のコモン コントロール ファイルがインストールされます。
最小限のInternet Explorerコンポーネントをインストールする方法については、次のKnowledge Baseの記事を参照してください。
Q185375: HOWTO: Create an "ISV" Redistributable for Internet Explorer 4
MFC、ATL、およびOLE DBテンプレート アプリケーションの再頒布
MFCアプリケーションでは、MFC DLLを静的にリンクしていない限り([プロジェクトの設定]ダイアログ ボックスの[一般]タブで[MFCのスタティックライブラリを使用]を指定)、Mfc42.dllを同時に再頒布する必要があります。MFCの静的リンクは、Visual C++ ProfessionalおよびEnterprise Editionでのみサポートされていることに注意してください。
アプリケーションをMFCライブラリに動的にリンクしている場合には、少なくともMfc42.dllとMsvcrt.dllを再頒布する必要があります。すべてのMFC DLLは共有バージョンのCランタイム ライブラリを使用します。Msvcrt.dllが必要なのはこのためです。アプリケーションがCRecordsetやCRecordViewなどのMFCデータベース クラスを使用している場合には、アプリケーションが使用するODBCとすべてのODBCドライバを再頒布する必要があります(詳細については、この記事の前の方の「データベース サポート ファイルの再頒布」を参照してください)。
ターゲット コンピュータ上では、MFCのすべての機能がサポートされるように、Mfc42.dllが登録されている必要があります。
MFC DLLを再頒布するときには、デバッグ バージョンではなくリリース バージョンを配布するようにしてください。DLLのデバッグ バージョンは再頒布不可能です。MFC DLLのデバッグ バージョンには、Mfc42d.dllのように、ファイル名の最後に"d"が付いています。
MFCを何らかの形で変更している場合には、ターゲット コンピュータ上に他のMFCアプリケーションがインストールするMFC DLLと衝突しないように、変更したMFC DLLの名前を変更しなくてはなりません。MFC DLLのリビルドと名前の変更は、推奨される手順ではありません。詳細については、MFC Technical Note 33(MSDN Library)を参照してください。
ATLまたはOLE DB Templatesプロジェクトは、MinDependencyまたはMinSize構成でビルドすることができます。MinSizeは出力ファイルのサイズをできる限り小さくしますが、ターゲット コンピュータ上にAtl.dllが存在している必要があります。ターゲット コンピュータ上では、ATLのすべての機能がサポートされるように、Atl.dllが登録されていなくてはなりません。ATL DLLのANSIバージョンとUNICODEバージョンが同じ名前Atl.dllであることに注意してください。UNICODEバージョンをWindows 95またはWindows 98コンピュータに再頒布することはできません。このためにはANSIバージョンが必要です(Os\System\Ansiフォルダ)。
ATLまたはOLE DB TemplatesプロジェクトをMinDependencyターゲットを指定してビルドした場合には、ターゲット コンピュータ上でAtl.dllをインストールし、登録する必要はありません。ただし、プログラム イメージのサイズが大きくなることがあります。
ATL実行可能アプリケーションを再頒布する場合には、次のコマンドを発行して、.exeファイル(およびそこに含まれるコントロール)を登録する必要があります。
filename /regserver
filenameは実行可能ファイルの名前です。
OLE DB Templatesアプリケーションでは、ターゲット コンピュータにMicrosoftのデータ アクセス(MDAC)ファイルの最新バージョンがインストールされている必要があります。Windows 95およびWindows 98コンピュータでは、これはDcom98をインストールするという意味になります。MDACとDcom98のインストールの詳細については、この記事の前の方のセクション「Visual C++ ActiveXコントロールの再頒布」を参照してください。
ローカライズ済みのMFCコンポーネントのインストール
MFC 4.2ローカライゼーションDLLをインストールすることで、アプリケーションが使用するMFCリソースのローカライズを行う場合には、このセクションの指示に従う必要があります。他の共有DLLと同様に、MFCローカライゼーションDLLは、すでにインストールされているバージョンよりも新しいバージョンである場合にのみインストールするようにしなくてはなりません。この意味で、このDLLは他のDLLのインストールと似ています。この記事の前の方の「再頒布可能ファイルのバージョン チェック」を参照してください。
さまざまなロケール用にいくつかのMFC DLLが用意されています。たとえば、MFC42DEU.DLLはドイツ語バージョンで、これをドイツ語ロケールとして識別するバージョン情報を含んでいます。ロケールDLLをインストールする場合には、そのDLLが対象としているロケールが、インストールされているWindowsシステムのロケールにマッチしていることを確認しなくてはなりません。DLLをインストールしたときには、その名前をMfc42loc.dllに変更する必要があります。
英語のシステムにMfc42loc.dllをインストールしてはなりません。英語のリソースはMfc42.dllに組み込まれており、MFCローカライゼーションDLLを探す(またロードする)よりも、このDLLからロードする方がはるかに高速です。
MFCアプリケーションのローカライズの詳細については、MFC Technical Note 57(MSDN Library)を参照してください。
謝辞
この記事の執筆にあたって励ましてくれ、技術的な支援を提供してくれた次の方々に感謝します: Shaun Miller、Rich McKinnon、Steve Miller、Dave Waggoner、Rod Wilkinson