アプリケーション ユーザー モデル ID (AppUserModelID)

アプリケーション ユーザー モデル ID (AppUserModelID) は、プロセス、ファイル、ウィンドウを特定のアプリケーションに関連付けるために、Windows 7 以降のシステムのタスク バーによって広く使用されます。 場合によっては、システムによってプロセスに割り当てられた内部 AppUserModelID に依存するだけで十分です。 ただし、複数のプロセスを所有するアプリケーション、またはホスト プロセスで実行されているアプリケーションは、それ以外の場合は異なるウィンドウを 1 つのタスク バー ボタンの下にグループ化し、そのアプリケーションのジャンプ リストの内容を制御できるように、自身を明示的に識別する必要がある場合があります。

AppUserModelID のApplication-DefinedとSystem-Defined

一部のアプリケーションでは、明示的な AppUserModelID を宣言しません。 これらは省略可能です。 その場合、システムは一連のヒューリスティックを使用して内部 AppUserModelID を割り当てます。 ただし、これらの計算を回避することにはパフォーマンス上の利点があり、正確なユーザー エクスペリエンスを保証する唯一の方法は、明示的な AppUserModelID です。 そのため、明示的な ID を設定することを強くお勧めします。 アプリケーションは、システム割り当て AppUserModelID を取得できません。

アプリケーションで明示的な AppUserModelID を使用する場合は、実行中のすべてのウィンドウまたはプロセス、ショートカット、およびファイルの関連付けに同じ AppUserModelID を割り当てる必要もあります。 また、 ICustomDestinationList を使用してジャンプ リストをカスタマイズするとき、および SHAddToRecentDocs を呼び出すときにも、その AppUserModelID を使用する必要があります。

Note

アプリケーションに明示的な AppUserModelID がない場合は、アプリケーション内から IApplicationDestinationsIApplicationDocumentListsICustomDestinationList メソッド、 および SHAddToRecentDocs を呼び出す必要があります。 これらのメソッドがインストーラーやアンインストーラーなどの別のプロセスから呼び出された場合、システムは正しい AppUserModelID を生成できず、それらの呼び出しは無効になります。

 

次の項目では、明示的な AppUserModelID を必要とする一般的なシナリオについて説明します。 また、複数の明示的な AppUserModelID を使用する必要があるケースも指摘しています。

  • 異なるアプリケーションとしてユーザーに表示される複数のモードを持つ UI を持つ 1 つの実行可能ファイルでは、各モードに異なる AppUserModelID を割り当てる必要があります。 たとえば、ユーザーがタスク バーにピン留めしてタスク バーから起動できる独立したエクスペリエンスとして表示されるアプリケーションの一部には、メイン エクスペリエンスとは別に、独自の AppUserModelID が必要です。

  • 異なる引数を持つ複数のショートカット。すべて同じアプリケーションとしてユーザーに表示される内容を取得するには、すべてのショートカットに対して 1 つの AppUserModelID を使用する必要があります。 たとえば、Windows インターネット エクスプローラーには、モード (アドオンなしで起動するなど) のショートカットが異なりますが、これらはすべて 1 つのインターネット エクスプローラー インスタンスとしてユーザーに表示されます。

  • ホスト プロセスとして機能し、ターゲット コンテンツをアプリケーションとして実行する実行可能ファイルは 、ホスト アプリケーションとして登録する必要があります。その後、ホストする認識される各エクスペリエンスに異なる AppUserModelID を割り当てることができます。 または、ホスト プロセスで、ホストされているプログラムが AppUserModelID を設定できるようにすることもできます。 いずれの場合も、ホスト プロセスは AppUserModelIDs のソース (それ自体またはホストされたアプリケーション) のレコードを保持する必要があります。 この場合、ターゲット コンテンツのないホスト プロセスのプライマリ ユーザー エクスペリエンスはありません。 たとえば、ローカルに統合された Windows リモート アプリケーション (RAIL) アプリケーション、Java ランタイム、RunDLL32.exe、またはDLLHost.exeなどです。

    既存のホストされているアプリケーションの場合、システムは個々のエクスペリエンスを識別しようとしますが、新しいアプリケーションでは明示的な AppUserModelID を使用して、目的のユーザー エクスペリエンスを保証する必要があります。

  • ユーザーが同じアプリケーションの一部である協調プロセスまたはチェーン プロセスでは、各プロセスに同じ AppUserModelID を適用する必要があります。 たとえば、ランチャー プロセス (チェーン) と Microsoft Windows メディア プレーヤーを含むゲームが含まれます。このゲームには、1 つのプロセスで実行される初回実行/セットアップ エクスペリエンスと、別のプロセス (協調的) で実行されているメイン アプリケーションがあります。

  • Windows エクスプローラー でコンテンツを参照および管理する以外に、別のアプリケーションとして機能するシェル名前空間拡張機能では、そのフォルダー プロパティに AppUserModelID を割り当てる必要があります。 たとえば、コントロール パネルです。

  • デプロイ フレームワークなどの仮想化環境では、仮想化環境は、管理する各アプリケーションに異なる AppUserModelID を割り当てる必要があります。 このような場合、アプリケーション起動ツールは中間プロセスを使用して環境を設定し、操作を別のプロセスに引き離してアプリケーションを実行します。 これにより、ショートカットが中間プロセスを指しているため、実行中のターゲット プロセスをショートカットに関連付けることができないことに注意してください。

    アプリケーションに複数のウィンドウ、ショートカット、またはプロセスがある場合は、そのアプリケーションに割り当てられた AppUserModelID も、仮想化環境によってそれらの各部分に適用する必要があります。

    この状況の例としては、ClickOnce フレームワークがあり、管理するアプリケーションの代わりに AppUserModelID が適切に割り当てられます。 このようなすべての環境と同様に、ClickOnce によって配置および管理されるアプリケーションでは、明示的な AppUserModelID 自体を割り当てないようにする必要があります。これは、ClickOnce によって割り当てられた AppUserModelID と競合し、予期しない結果が発生するためです。

Application-Defined AppUserModelID を作成する方法

アプリケーションは、次の形式で AppUserModelID を指定する必要があります。 128 文字以内で、スペースを含めることはできません。 各セクションはパスカルケースにする必要があります。

CompanyName.ProductName.SubProduct.VersionInformation

CompanyNameProductName は常に使用する必要があります。一方 SubProduct 、 と VersionInformation の部分は省略可能であり、アプリケーションの要件によって異なります。 SubProductでは、複数のサブアプリケーションで構成されるメイン アプリケーションで、サブアプリケーションとそれに関連付けられているウィンドウごとに個別のタスク バー ボタンを提供できます。 VersionInformation を使用すると、2 つのバージョンのアプリケーションを個別のエンティティと見なしながら共存できます。 この方法でアプリケーションを使用することを意図していない場合は、 を省略して、 VersionInformation アップグレードされたバージョンで置き換えたバージョンと同じ AppUserModelID を使用できるようにします。

AppUserModelID を割り当てる場所

アプリケーションで 1 つ以上の明示的な AppUserModelID を使用する場合は、次の場所と状況でそれらの AppUserModelID を適用する必要があります。

  • アプリケーションのショートカット ファイルの System.AppUserModel.ID プロパティ。 ショートカット ( IShellLink、CLSID_ShellLink、または .lnk ファイルとして) は、シェル全体で使用される IPropertyStore およびその他のプロパティ設定メカニズムを使用してプロパティをサポートします。 これにより、タスク バーはピン留めするための適切なショートカットを識別し、プロセスに属するウィンドウがそのタスク バー ボタンに適切に関連付けられるようにします。

    Note

    System.AppUserModel.ID プロパティは、そのショートカットの作成時にショートカットに適用する必要があります。 Microsoft Windows インストーラー (MSI) を使用してアプリケーションをインストールする場合、 MsiShortcutProperty テーブルを使用すると、インストール時に AppUserModelID をショートカットに適用できます。

     

  • アプリケーションの実行中のウィンドウのプロパティとして。 これは、次の 2 つの方法のいずれかで設定できます。

    1. タスク バーのグループ化を制御するために 1 つのプロセスが所有する異なるウィンドウで異なる AppUserModelID が必要な場合は、 SHGetPropertyStoreForWindow) を使用してウィンドウのプロパティ ストアを取得し、AppUserModelID をウィンドウ プロパティとして設定します。
    2. プロセス内のすべてのウィンドウで同じ AppUserModelID を使用する場合は、 SetCurrentProcessExplicitAppUserModelID を使用して、プロセスに AppUserModelID を設定します。 アプリケーションは、アプリケーションが UI を表示したり、ジャンプ リストを操作したり、SHAddToRecentDocs を呼び出す (またはシステムが実行する) 前に、アプリケーションの初期スタートアップ ルーチン中に AppUserModelID を設定するために SetCurrentProcessExplicitAppUserModelID を呼び出す必要があります。

    ウィンドウ レベルの AppUserModelID は、プロセス レベルの AppUserModelID をオーバーライドします。

    アプリケーションがウィンドウ レベルで明示的な AppUserModelID を設定すると、アプリケーションはタスク バー ボタンの再起動コマンドの詳細を提供できます。 この情報を提供するために、次のプロパティが使用されます。

    Note

    アプリケーションを起動するためのショートカットが存在する場合、アプリケーションでは、再起動プロパティを使用する代わりに、ショートカットのプロパティとして AppUserModelID を適用する必要があります。 その場合、ショートカットのコマンド ライン、アイコン、テキストを使用して、再起動プロパティと同じ情報が提供されます。

     

    ウィンドウ レベルの明示的な AppUserModelID では、 System.AppUserModel.PreventPinning プロパティを使用して、ピン留めまたは再起動に使用できないように指定することもできます。

  • カスタマイズまたは更新 (ICustomDestinationList)、取得 (IApplicationDocumentLists)、またはクリア (IApplicationDestinations) アプリケーションのジャンプ リストの呼び出し。

  • アプリケーションが自動的に生成された最近または頻繁な宛先リストを使用する場合は、ファイル関連付けの登録 (ProgID を使用)。 この関連付け情報は 、SHAddToRecentDocs によって参照されます。 この情報は、ICustomDestinationList::AppendCategory を使用してカスタムジャンプ リストに IShellItem 変換先を追加するときにも使用されます。

  • 任意の呼び出しで、アプリケーションは SHAddToRecentDocs に直接行います。 アプリケーションが共通ファイル ダイアログに依存して SHAddToRecentDocs を代わりに呼び出す場合、これらの呼び出しは、AppUserModelID がプロセス全体に対して設定されている場合にのみ、明示的な AppUserModelID を推測できます。 アプリケーションがプロセスではなくウィンドウで AppUserModelID を設定する場合、アプリケーションは明示的な AppUserModelID を使用して SHAddToRecentDocs 自体に対するすべての呼び出しを行い、共通ファイル ダイアログが独自の呼び出しを行わないようにする必要があります。 これは、アプリケーションのジャンプ リストの [最近] セクションまたは [ 頻繁 ] セクションが正確になるように、アイテムを開くたびに実行する必要があります。

次の項目では、一般的なシナリオと、それらのシナリオで明示的な AppUserModelID を適用する場所について説明します。

  • 1 つのプロセスに複数のアプリケーションが含まれている場合は、 SHGetPropertyStoreForWindow を使用してウィンドウのプロパティ ストアを取得し、AppUserModelID をウィンドウ プロパティとして設定します。
  • アプリケーションで複数のプロセスを使用する場合は、各プロセスに AppUserModelID を適用します。 各プロセスで同じ AppUserModelID を使用するかどうかは、各プロセスをメイン アプリケーションの一部として表示するか、個々のエンティティとして表示するかによって異なります。
  • 同じプロセス内のセットから特定のウィンドウを分離するには、ウィンドウのプロパティ ストアを使用して、分離するウィンドウに 1 つの AppUserModelID を適用し、別の AppUserModelID をプロセスに適用します。 ウィンドウ レベルの AppUserModelID で明示的にラベル付けされていないそのプロセス内のウィンドウは、プロセスの AppUserModelID を継承します。
  • ファイルの種類がアプリケーションに関連付けられている場合は、ファイルの種類の ProgID 登録で AppUserModelID を割り当てます。 個別のアプリケーションとしてユーザーに表示される異なるモードで 1 つの実行可能ファイルを起動する場合は、モードごとに個別の AppUserModelID が必要です。 その場合、ファイルの種類に対して複数の ProgID 登録があり、それぞれに異なる AppUserModelID が必要です。
  • ユーザーがアプリケーションを起動できるショートカットの場所が複数ある場合 ( [スタート ] メニュー、デスクトップ、または他の場所) は、ショートカットのプロパティ ストアを取得して、ショートカット プロパティとしてすべてのショートカットに 1 つの AppUserModelID を適用します。
  • アプリケーションによって SHAddToRecentDocs に対して明示的な呼び出しが行われる場合は、呼び出しで AppUserModelID を使用します。 共通ファイル ダイアログを使用してファイルを開いたり保存したりすると、アプリケーションの代わりに ダイアログによって SHAddToRecentDocs が呼び出されます。 この呼び出しでは、プロセスから明示的な AppUserModelID を推論できます。 ただし、明示的な AppUserModelID がウィンドウ プロパティとして適用されている場合、共通ファイル ダイアログでは正しい AppUserModelID を特定できません。 その場合、アプリケーション自体は SHAddToRecentDocs を明示的に呼び出し、適切な AppUserModelID を指定する必要があります。 さらに、アプリケーションは、IFileOpenDialog または IFileSaveDialogGetOptions メソッドで FOS_DONTADDTORECENT フラグを設定することで、その代わりに共通ファイル ダイアログが SHAddToRecentDocs を呼び出さないようにする必要があります。

アプリケーションをホスト プロセスとして登録する

アプリケーションでは、IsHostApp レジストリ エントリを設定して、実行可能ファイルのプロセスがタスク バーによってホスト プロセスと見なされるようにすることができます。 これは、グループ化と既定のジャンプ リスト エントリに影響します。

次の例は、必要なレジストリ エントリを示しています。 エントリに値が割り当てられないことに注意してください。その存在が必要なすべてです。 REG_NULL値です。

HKEY_CLASSES_ROOT
   Applications
      example.exe
         IsHostApp

プロセス自体またはプロセスの起動に使用されるショートカット ファイルに明示的な AppUserModelID がある場合、ホスト プロセス の一覧は無視され、アプリケーションはタスク バーによって通常のアプリケーションとして扱われます。 アプリケーションの実行中のウィンドウは、1 つのタスク バー ボタンの下にグループ化され、アプリケーションをタスク バーにピン留めできます。

実行中のプロセスの実行可能ファイル名のみがわかっていて、明示的な AppUserModelID がなく、その実行可能ファイルがホスト プロセスの一覧にある場合、プロセスの各インスタンスはタスク バーのグループ化用に個別のエンティティとして扱われます。 プロセスの特定のインスタンスに関連付けられているタスク バー ボタンには、プロセスの新しいインスタンスのピン留め/ピン留め解除オプションや起動アイコンは表示されません。 このプロセスは、[ スタート ] メニューの [最も頻繁に使用される (MFU)] の一覧にも含められません。 ただし、起動引数 (通常は "アプリケーション" としてホストするターゲット コンテンツ) を含むショートカットを使用してプロセスが起動された場合、システムは ID を決定でき、アプリケーションをピン留めして再起動できます。

タスク バーのピン留めと最近または頻繁なリストの除外リスト

アプリケーション、プロセス、およびウィンドウでは、タスク バーにピン留めしたり、[ スタート ] メニューの MFU リストに含めたりするために、それ自体を使用できないようにすることができます。 これを実現するには、次の 3 つのメカニズムがあります。

  1. 次に示すように、NoStartPage エントリをアプリケーションの登録に追加します。

    HKEY_CLASSES_ROOT
       Applications
          Example.exe
             NoStartPage
    

    NoStartPage エントリに関連付けられているデータは無視されます。 エントリの存在のみが必要です。 したがって、NoStartPage の理想的な型はREG_NONEです。

    明示的な AppUserModelID を使用すると、NoStartPage エントリがオーバーライドされることに注意してください。 明示的な AppUserModelID がショートカット、プロセス、またはウィンドウに適用されると、その ID はピン留め可能になり、[ スタート ] メニューの MFU リストの対象になります。

  2. ウィンドウとショートカットで System.AppUserModel.PreventPinning プロパティを設定します。 このプロパティは、 PKEY_AppUserModel_ID プロパティの前にウィンドウで設定する必要があります。

  3. 次に示すように、次のレジストリ サブキーの下に、明示的な AppUserModelID を値として追加します。

    HKEY_LOCAL_MACHINE
       Software
          Microsoft
             Windows
                CurrentVersion
                   Explorer
                      FileAssociation
                         NoStartPageAppUserModelIDs
                            AppUserModelID1
                            AppUserModelID2
                            AppUserModelID3
    

    各エントリは、AppUserModelID の名前を持つREG_NULL値です。 この一覧で見つかった AppUserModelID はピン留めできず、[ スタート ] メニューの MFU リストに含める資格がありません。

特定の実行可能ファイルとその名前に特定の文字列を含むショートカットは、MFU リストへのピン留めと包含から自動的に除外されます。

Note

この自動除外は、明示的な AppUserModelID を適用することでオーバーライドできます。

 

大文字と小文字に関係なく、次のいずれかの文字列がショートカット名に含まれている場合、プログラムはピン留めできず、最も頻繁に使用されるリストには表示されません (Windows 10には適用されません)。

  • ドキュメント
  • ヘルプ
  • インストール
  • 詳細情報
  • 自分を読む
  • 最初に読み取る
  • Readme
  • [削除]
  • セットアップ
  • サポート
  • 新着記事

次のプログラムの一覧はピン留めできません。最も頻繁に使用される一覧から除外されます。

  • Applaunch.exe
  • Control.exe
  • Dfsvc.exe
  • Dllhost.exe
  • Guestmodemsg.exe
  • Hh.exe
  • Install.exe
  • Isuninst.exe
  • Lnkstub.exe
  • Mmc.exe
  • Mshta.exe
  • Msiexec.exe
  • Msoobe.exe
  • Rundll32.exe
  • Setup.exe
  • St5unst.exe
  • Unwise.exe
  • Unwise32.exe
  • Werfault.exe
  • Winhlp32.exe
  • Wlrmdr.exe
  • Wuapp.exe

上記のリストは、次のレジストリ値に格納されます。

Note

これらのリストは、アプリケーションで変更しないでください。 同じエクスペリエンスに対して、前述の除外リスト メソッドのいずれかを使用します。

 

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FileAssociation
                     AddRemoveApps
                     HostApps

SetCurrentProcessExplicitAppUserModelID

GetCurrentProcessExplicitAppUserModelID

タスク バー拡張機能

ICustomDestinationList::SetAppID

IApplicationDocumentLists::SetAppID

IApplicationDestinations::SetAppID

SHGetPropertyStoreForWindow