IAppPublisher
COM公式ドキュメント
コントロールパネルの [プログラムの追加と削除] を通じてアプリケーションを公開するためのメソッドを公開します。これはこの目的のために実装される主要なインターフェイスです。
解説(Remarks)
コントロールパネルの [プログラムの追加と削除] は、登録された発行元オブジェクトを作成し、その IAppPublisher インターフェイスを要求します。IAppPublisher を使用して作成するアプリケーション列挙子を使うと、公開されたアプリケーションオブジェクトを作成できます。
[プログラムの追加と削除] は発行元から公開されたアプリケーションの一覧を収集し、次に発行元を使用してこれらのアプリケーションを Microsoft Active Directory とともに表示します。ユーザーが [プログラムの追加と削除] で [新しいプログラムの追加] をクリックすると、公開されたアプリケーションの一覧が表示されます。
次のコンポーネントオブジェクトモデル (COM) インターフェイスを使用して、[プログラムの追加と削除] にアプリケーションを公開できます。
- IAppPublisher
- IEnumPublishedApps
- IPublishedApp
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
AppManagement
Publishers
たとえば、発行元の名前が "My Publisher" の場合、"Publishers" の下に "My Publisher" という名前の新しいキーを作成し、その既定の REG_SZ 値を発行元の CLSID とします。
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
AppManagement
Publishers
My Publisher
(Default) = {4D05CD3D-FFED-46bb-B9F1-321C26BE6362}
また、次のように一般的な COM サーバーの登録エントリを作成することもできます。
HKEY_CLASSES_ROOT
CLSID
{469EE8CE-1B86-4524-9042-AAA44FD9C8F2}
(Default) = Sample Applications Publisher
InProcServer32
(Default) = pubdemo.dll
ThreadingModel = Apartment
この方法で発行元を登録すると、[新しいプログラムの追加] ビューが表示される際に、[プログラムの追加と削除] はオブジェクトに対して CoCreateInstance を呼び出してオブジェクトのインスタンスを作成し、適切な IAppPublisher インターフェイスを要求します。IAppPublisher を使用して、[プログラムの追加と削除] はアプリケーション列挙子 (IEnumPublishedApps) と、公開されたアプリケーションを説明する情報を取得します。IPublishedApp の実装は、その IPublishedApp::Install メソッドで、関連付けられたアプリケーションのインストールを担当します。ユーザーがユーザーインターフェイスで [追加] または [後で追加] ボタンをクリックすると、[プログラムの追加と削除] はこのメソッドを呼び出します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
廃止されました。[プログラムの追加と削除] コントロールパネルアプリケーションのクライアントは E_NOTIMPL を返してかまいません。
| pdwCat | DWORD* | out | このパラメーターは使用されません。 |
戻り値
このメソッドは値を返しません。
アプリケーション発行元が提供するカテゴリを列挙した構造体を取得します。
| pAppCategoryList | APPCATEGORYINFOLIST* | out | APPCATEGORYINFOLIST 構造体へのポインター。この構造体の cCategory メンバーはサポートされるカテゴリの数を返します。pCategoryInfo メンバーは APPCATEGORYINFO 構造体の配列へのポインターを返します。この配列にはアプリケーション発行元がサポートするすべてのカテゴリが含まれ、CoTaskMemAlloc を使用して割り当て、CoTaskMemFree を使用して解放する必要があります。 |
戻り値
型: HRESULT
このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
[プログラムの追加と削除] コントロールパネルアプリケーションは、カテゴリに対して返された ID を IAppPublisher::EnumApps メソッドに渡して、どのカテゴリを列挙するかを識別します。
例
次の例は、IAppPublisher::GetCategories によって返される APPCATEGORYINFO 構造体の配列のサイズを計算する方法を示しています。
size_t CategoryListArraySize = sizeof(APPCATEGORYINFO) * pInfoList->cCategory;
廃止されました。[プログラムの追加と削除] コントロールパネルアプリケーションのクライアントは E_NOTIMPL を返してかまいません。
| pdwApps | DWORD* | out | このパラメーターは使用されません。 |
戻り値
このメソッドは値を返しません。
指定されたカテゴリについて、アプリケーション発行元が公開したすべてのアプリケーションを列挙するための列挙子を作成します。
| pAppCategoryId | GUID* | in | 列挙するアプリケーションカテゴリを指定する GUID へのポインター。これは IAppPublisher::GetCategories を通じて提供されるカテゴリのいずれかである必要があります。pAppCategoryID が IAppPublisher::GetCategories を通じて提供されていないカテゴリを識別する場合、列挙子の作成は成功しますが、列挙子は 0 個の項目を返します。このパラメーター値が NULL の場合、列挙子はすべてのカテゴリについて公開されたアプリケーションを返します。 |
| ppepa | IEnumPublishedApps** | out | IEnumPublishedApps インターフェイスを指す IEnumPublishedApps 参照変数へのポインターのアドレス。アプリケーション発行元は IEnumPublishedApps インターフェイスをサポートする列挙オブジェクトを作成し、そのポインター値をこのパラメーターを通じて返す必要があります。 |
戻り値
型: HRESULT
このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAppPublisher "{07250A10-9CF9-11D1-9076-006008059382}" #usecom global IAppPublisher IID_IAppPublisher "{}" #comfunc global IAppPublisher_GetNumberOfCategories 3 var #comfunc global IAppPublisher_GetCategories 4 var #comfunc global IAppPublisher_GetNumberOfApps 5 var #comfunc global IAppPublisher_EnumApps 6 var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IAppPublisher "{07250A10-9CF9-11D1-9076-006008059382}" #usecom global IAppPublisher IID_IAppPublisher "{}" #comfunc global IAppPublisher_GetNumberOfCategories 3 sptr #comfunc global IAppPublisher_GetCategories 4 sptr #comfunc global IAppPublisher_GetNumberOfApps 5 sptr #comfunc global IAppPublisher_EnumApps 6 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。