次の方法で共有


SelfReg テーブル

SelfReg テーブルには、自己登録される必要があるモジュールに関する情報が含まれています。 インストーラーは、モジュールのインストール時に DllRegisterServer 関数を呼び出し、モジュールのアンインストール時に DllUnregisterServer を呼び出します。 インストーラーは EXE ファイルを自己登録しません。

SelfReg テーブルには次の列があります。

Column 種類 キー Nullable
File_ Identifier Y N
コスト 整数 N Y

 

[列]

File_

登録される必要があるモジュールを示す、File テーブルの最初の列への外部キー。

Cost

モジュールを登録するコスト (バイト単位)。 これは、負ではない数である必要があります。

解説

インストール パッケージの作成者は自己登録を使用しないことを強くお勧めします。 代わりに、この目的のためにインストーラーによって提供される 1 つ以上のテーブルを作成してモジュールを登録する必要があります。 詳細については、「レジストリ テーブル グループ」を参照してください。 自己登録ルーチンにより重要な構成情報が隠される傾向があるため、自己登録を使用すると、中央インストーラー サービスを利用する利点の多くは失われます。 自己登録を回避する理由は次のとおりです。

  • 自己登録されたモジュールを使用するインストールのロールバックは、DllUnregisterServer を使用して安全に実行できません。その理由は、自己登録されたキーが別の機能やアプリケーションによって使用されているかどうかを判別する手段がないためです。
  • クラスまたは拡張サーバーの登録が自己登録ルーチン内で実行されている場合、公開通知を使用する機能が低下します。
  • インストーラーは、ユーザー単位またはマシン単位の両方のインストールに対して、レジストリ テーブル内の HKCR キーを自動的に処理します。 DllRegisterServer ルーチンでは現在、ユーザーごとの HKCR キーの概念がサポートされていません。
  • 複数のユーザーが同じコンピューター上で自己登録済みアプリケーションを使用している場合、各ユーザーはアプリケーションを初めて実行する際にインストールする必要があります。 そうしないと、インストーラーは適切な HKCU レジストリ キーが存在することを簡単に判断できません。
  • コンポーネントが run-from-source として指定され、かつ SelfReg テーブルに記載されている場合、DllRegisterServer は、タイプ ライブラリなどのネットワーク リソースへのアクセスを拒否される可能性があります。 これにより、管理インストール中にコンポーネントのインストールが失敗するおそれがあります。
  • DllRegisterServer に必要な新しいコードは一般的に DLL ごとに異なるため、DLL を自己登録すると、コーディング エラーが発生しやすくなります。 代わりに、データベース内のレジストリ テーブルを使用して、インストーラーによって提供される既存のコードを利用してください。
  • DLL を自己登録すると、存在しないかバージョンが誤っている補助 DLL にリンクする場合があります。 これに対し、インストーラーでは、システムの現在の状態に依存することなく、レジストリ テーブルを使用して DLL を登録できます。

Note

SelfRegModules および SelfUnRegModules アクションを使用して、インストーラーで自己登録 DLL を登録または登録解除する順序を指定することはできません。 「自己登録の順序の指定」を参照してください。

 

検証

ICE03
ICE06
ICE32