FAQ
カスタム コンポーネントを複数の製品に登録する方法

ナレッジ番号:5259 | 登録日:2023/07/26 | 更新日:2024/07/08

サマリ

以下のトピックでは、開発者が既存のコンポーネントを ArcGIS Desktop と ArcGIS Engine に登録する方法について説明します。

内容


カスタム コンポーネントの複数の製品への登録について

ArcGIS 10 より前のバージョンでは、開発者はコンポーネント オブジェクト モデル(COM)を visible に設定し、正しいカテゴリ登録コードを追加することで ArcGIS Desktop と ArcGIS Engine に対して動作するコンポーネントを作成することが可能でした。以下のコード例は、ArcMap と ArcGIS Engine に登録されるコマンドを示しています。

[VB.NET]
Private Shared Sub ArcGISCategoryRegistration(ByVal registerType As Type)
Dim regKey As String = String.Format("HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID) MxCommands.Register(regKey)
ControlsCommands.Register(regKey)
End Sub
[C#]
private static void ArcGISCategoryRegistration(Type registerType)
{
string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);
MxCommands.Register(regKey);
ControlsCommands.Register(regKey);
}

前述のコード例は、開発者が RegAsm を使用してコンポーネントを登録する時に実行されていたものです。そしてその結果、コンポーネントは適切なカテゴリに配置されます。ArcMap または ArcGIS Engine が開始すると、アプリケーションはコマンドを識別し、それを読み込みます。

バージョン 10 以降は、ArcGIS 製品はシステム レジストリからコンポーネントをやみくもに読み込むことはしません。開発者は、ソリューションに適切な ESRIRegAsm 構文を追加し、新しい ESRIRegAsm ユーティリティを使用して ArcGIS にコンポーネントを登録する(Migrating ArcGIS 9.3 Desktop and Engine custom components to ArcGIS 10 で述べられているステップをたどります。 )か、または、アプリケーションを使用したりデバッグしたりする前に手動で ESRIRegAsm を呼び出しておく必要があります。

開発者は引き続き、コンポーネント カテゴリ登録コードをカスタム コンポーネントに挿入する必要があります。ESRIRegAsm はコンポーネント カテゴリ登録コードに基づいて、適切に構成ファイルを生成します。

さらにArcGIS 製品はお互いに独立して存在することができます。それは1つのコンピュータ上に、ArcGIS Desktop と ArcGIS Engine が 2 つの別々の場所にインストールされている可能性があることを意味します。そのため、1 つもしくは複数の ArcGIS 製品に共有されるコンポーネントはターゲットの製品ごとに明示的に登録されなくてはなりません。

一回のまたは複数回の登録が適切になされないと、開発したコンポーネントがアプリケーションによって検出されない、あるいは 1 つのアプリケーションでしか開発したコンポーネントが検出されないという問題に開発者は遭遇してしまいます。これはしばしば、ArcGIS 9.x のサンプルを使用したりデバッグしたりする時、あるいは古いアプリケーションを移行する時に起こります。

ArcGIS Desktop と ArcGIS Engine に対して動作するカスタム コンポーネントは ESRIRegAsm を使用して別々に登録されなければなりません(一度 ArcGIS Desktop に対して行い、それから ArcGIS Engine に対して再度行います)。これにより、(もし存在しているのならば)それぞれのターゲットの ArcGIS 製品に対する、コンポーネントを読み込むための適切な構成ファイルが作成されます。

共有コンポーネントの登録

以下の MS ビルド 拡張マークアップ言語(XML)のコード例は、 共有コンポーネントを ArcGIS Desktop と ArcGIS Engine に登録するための、Visual Studio C# または VB .NET プロジェクト ファイル内における ESRIRegAsm の使い方を示しています。

[XML]
<Target Name="BeforeClean">
<Exec
WorkingDirectory="$(CommonProgramFiles)\ArcGIS\bin"
Command="esriRegasm.exe "$(TargetPath)" /p:Engine /u /s"
Condition="Exists('$(TargetPath)')" ContinueOnError="true"/>
<Exec
WorkingDirectory="$(CommonProgramFiles)\ArcGIS\bin"
Command="esriRegasm.exe "$(TargetPath)" /p:Desktop /u /s"
Condition="Exists('$(TargetPath)')"
ContinueOnError="true"/>
</Target>
<Target Name="AfterBuild">
<Exec
ContinueOnError="true"
WorkingDirectory="$(CommonProgramFiles)\ArcGIS\bin"
Command="esriRegasm.exe "$(TargetPath)" /p:Engine /s"/>
<Exec
ContinueOnError="true"
WorkingDirectory="$(CommonProgramFiles)\ArcGIS\bin"
Command="esriRegasm.exe "$(TargetPath)" /p:Desktop /s"/>
</Target>

Visual Studio C# または VB .NET プロジェクト ファイルを編集するために以下のステップを行います。

  1. Visual Studio のプロジェクトを右クリックして [プロジェクトのアンロード] を選択します。
  2. プロジェクト ファイルを再度右クリックして、[編集 <プロジェクト名>] を選択します。

詳細については、Migrating ArcGIS 9.3 Desktop and Engine custom components to ArcGIS 10 をご覧ください。

統合開発環境 (IDE) 統合ツールを使用してカスタム コンポーネントを作成する時、[ArcGIS Add Class] ウィザードは、最初に選択されたターゲットの ArcGIS 製品のみをクラス ライブラリのプロジェクトに追加します。以下は ArcGIS Add Class ウィザードの画像です。


さらに、 指定された ArcGIS 製品がマシンにインストールされていない場合、IDE が生成したプロジェクト ファイルは、ESRIRegAsm がプロジェクト アセンブリの登録に失敗するとビルド エラーを発行します。前述の XML コード例で見られる ContinueOnError 属性は、このタイプのビルド エラーを回避するのに役立ち、その代わりにビルドの警告を発行します。従って、開発者はビルドの警告のリストを常に見るようにし、ESRIRegAsm のなんらかのステップが失敗していないかどうかチェックすべきです。

参照:

Migrating ArcGIS 9.3 Desktop and Engine custom components to ArcGIS 10

ESRIRegAsm ユーティリティ

COM コンポーネントを登録する方法

COM コンポーネント カテゴリへのクラスの登録


開発ライセンス 配布ライセンス
Engine Developer Kit Engine Runtime
ArcInfo ArcInfo
ArcEditor ArcEditor
ArcView ArcView

この文書は、ArcObjects Help for .NET Developers 内のトピック How to register custom components for multiple products を元に翻訳したものです。

メタデータ

種類

製品