Firebird Documentation IndexFirebird 2.5 リリースノートインストールの注意 → Windows版
Firebird Home Firebird Home Prev: インストールの注意Firebird Documentation IndexUp: インストールの注意Next: 互換性問題

Windows版

エンベデッド版向けのデプロイ構造
MSCV8アセンブリの管理

エンベデッド版向けのデプロイ構造

Adriano dos Santos Fernandes

Vlad Khorsun

トラッカー・エントリー:CORE-1814

このリリースでは、エンベデッド版のアプリケーション・コンポーネントの配置を従来よりやや柔軟に設定できます。ここでの変更は、アプリケーション開発者の間で問題となっていた、相互に関連するいくつかのイシューに対処したものです。すなわち、

  • ib_util.dll、またはfbembed.dll中のクライアントコード、または完全な外部ライブラリなど、他のDLLに依存する外部関数ライブラリをFirebirdの擬似ルートディレクトリ(<root>)下の..\UDFフォルダにそのまま置くことはできませんでした。依存しているファイルが通常その配置場所には存在しないからです。そのため、%PATH%変数を使ってちょっとした工夫をする必要がありました。

  • 従来の擬似<root>の決定ルールは、アプリケーションコードとしてそのフォルダにfbembed.dll(リネームしたものでも可)が存在することを要求していました。その影響で、これを必要とする各アプリケーション用にfbembed.dllの別々のコピーを確保するか、または、実行可能な全てのクライアントを一箇所に配置するか、いずれかの対応が必要でした。

バージョン2.5のエンベデッド版エンジンでは<root>の決定が変更され、もはやそこがアプリケーションのパスである必要はありません。それは、どこであれfbembed.dllの配置によって決まります。このことは、バージョン2.5のエンジンでは、かつてはfbembed.dllをロードしていた任意のエンベデッドアプリケーションやサードパーティ製UDFライブラリやコマンドラインツールのローカルコピーで利用できるFirebirdの擬似<root>のために標準の自己充足的なストラクチャーをセットアップできることを意味します。

Firebirdの擬似ツリーをアプリケーションから切り離したい場合は、必ず、そのストラクチャーのfirebird.confファイル内で<root>の配置の絶対パスを示すRootDirectoryパラメータを設定して下さい。

Note

新たなルールが既存のエンベデッドストラクチャーを破壊することはありません。従来通りのやり方でエンベデッドアプリケーションを構築することができます。違いは、実行ファイルをエンベデッド版Firebirdの擬似<root>ストラクチャー専用のコピーと一緒にデプロイする必要がなくなったということです。

MSCV8アセンブリの管理

Vlad Khorsun

トラッカー・エントリー:CORE-2243

Note

この変更が施されたのがバージョン2.1.2からだったため、この議論もV.2 インストールと移行に関するドキュメント内に特別なトピックとして登場しています。

Firebird 2.5はVisual Studio 2005のMicrosoft MSVC8コンパイラでビルドされています。Firebirdの全バイナリはビルド時に動的リンキングを用いているため、それらは全てランタイム・ライブラリを必要とします。

dll地獄問題を避けるため、Microsoftは複数のアプリケーションで共有される可能性のあるコンポーネントの配布に新たなルールを導入しました。Windows XP以降、共有ライブラリ—Visual C++やVisual Cのランタイムmsvcp80.dllmsvcr80.dllmscvcm80.dllなど—は、共有アセンブリまたはプライベートアセンブリとして配布される必要があります。

  • Microsoft MSIインストーラーは共有アセンブリを複数のアプリケーションで使用される共通の特別フォルダSxS内にインストールします。

  • プライベートアセンブリはアプリケーションと一緒に配布され、アプリケーションフォルダに置かれます。アセンブリが\system32フォルダを使用することはXP、Server2003、Vistaプラットフォーム・ファミリーでは禁止されています。

共有アセンブリとしてのランタイムのインストール

ランタイムを共有アセンブリとしてインストールするには、デプロイするシステム上にMSI 3.0がインストールされている必要があり、また、ユーザーが管理者権限を持っていなければなりません。アプリケーションがエンベデッド版Firebirdと一緒にデプロイされていて、これが不可能となる場合がしばしばあります:エンベデッドサーバーはインストールされていて、実行可能な状態でなければなりません。この場合、ランタイムを共有アセンブリとしてインストールすることは計画しないで下さい。

プライベートアセンブリとしてのランタイムのインストール

MSVC8ランタイムライブラリをプライベートアセンブリとしてインストールするには、その内容物—上記の三つのDLLとアセンブリのマニフェストファイルMicrosoft VC80.CRT.manifest—を、これらに依存するバイナリ(.exeまたは.dll)が存在する全てのフォルダに置いておく必要があります。それらのバイナリには、コンパイル時に使用されたライブラリと同等のランタイムの配置が期待されるフォルダに対するチェックが組み込まれているためです。

典型的なエンベデッド版Firebirdのインストールでは、MSVC8ランタイムアセンブリの完全なコピーが三つ必要になります:アプリケーションフォルダに一つ、\intlフォルダと\udfフォルダにそれぞれ一つずつ。インストールの膨張問題を避けるため、バージョン2.1.2向けFirebirdバイナリの一部のビルド方法にいくつかの変更が加えられています。(トラッカー・エントリー CORE-2243も参照して下さい)。

これらは、アプリケーション構成がMSVC8ランタイムアセンブリを組み込んでいない場合でもエンベデッド版Firebirdが動作できるようにするための変更です:

  1. ib_util.dll、fbudf.dll、ib_udf.dll、fbintl.dllはエンベデッドマニフェストなしでビルドされています。その効果として、ローダーが対応するDLLと同じフォルダでMSVC8アセンブリを検索するのを避けることができます。ホストのプロセスは、これらのセカンダリDLLをロードしようとする前に、マニフェストを介してMSVC8ランタイムをロードし終えていなければなりません。

  2. 現在のfbembed.dllには、必要となる可能性がある任意のセカンダリDLLをロードする前に、自身のマニフェストからアクティベーションコンテキストを生成しアクティベートするためのコードが含まれています。

注意

  1. MSVC8ランタイムをインストールするMicrosoftの再配布パッケージの利用を強く推奨します!インストール実行ファイルvcredist_x86.exeまたはvcredist_x64.exe(あなたが選択したFirebirdに適したもの)がフルインストール用またはエンベデッド版用のzipファイル一式の中にあるはずです。存在しない場合も、Microsoftのダウンロードサイトから落としてくることができます。

  2. MSVC8ランタイムアセンブリがプライベートアセンブリとしてインストールされる場合、サードパーティ製UDFは以下の条件のうち一つを満たしている必要があります。UDFライブラリをコンパイルする際に、MSVC8ランタイムは次のいずれかとなります

    • 使用されない

    • 使用されても、エンベデッドマニフェストなしでビルドが行われる

    • 使用され、エンベデッドマニフェストがビルドに使われる—MSVC IDEのデフォルトオプション。この場合、MSVC8アセンブリは同じフォルダになければなりません

Prev: インストールの注意Firebird Documentation IndexUp: インストールの注意Next: 互換性問題
Firebird Documentation IndexFirebird 2.5 リリースノートインストールの注意 → Windows版