トレーニング
ラーニング パス
FastTrack サービス、データ管理などを使用して、財務と運用アプリの実装を成功させるためのプロジェクト方法論を計画および設計します。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
アプリケーション ユーザー モデル ID (AppUserModelID) は、プロセス、ファイル、ウィンドウを特定のアプリケーションに関連付けるために、Windows 7 以降のシステムのタスク バーによって広く使用されます。 場合によっては、システムによってプロセスに割り当てられた内部 AppUserModelID に依存するだけで十分です。 ただし、複数のプロセスを所有するアプリケーション、またはホスト プロセスで実行されているアプリケーションは、それ以外の場合は異なるウィンドウを 1 つのタスク バー ボタンの下にグループ化し、そのアプリケーションのジャンプ リストの内容を制御できるように、自身を明示的に識別する必要がある場合があります。
一部のアプリケーションでは、明示的な AppUserModelID を宣言しません。 これらは省略可能です。 その場合、システムは一連のヒューリスティックを使用して内部 AppUserModelID を割り当てます。 ただし、これらの計算を回避することにはパフォーマンス上の利点があり、正確なユーザー エクスペリエンスを保証する唯一の方法は、明示的な AppUserModelID です。 そのため、明示的な ID を設定することを強くお勧めします。 アプリケーションは、システム割り当て AppUserModelID を取得できません。
アプリケーションで明示的な AppUserModelID を使用する場合は、実行中のすべてのウィンドウまたはプロセス、ショートカット、およびファイルの関連付けに同じ AppUserModelID を割り当てる必要もあります。 また、 ICustomDestinationList を使用してジャンプ リストをカスタマイズするとき、および SHAddToRecentDocs を呼び出すときにも、その AppUserModelID を使用する必要があります。
注意
アプリケーションに明示的な AppUserModelID がない場合は、アプリケーション内から IApplicationDestinations、 IApplicationDocumentLists、 ICustomDestinationList メソッド、 および 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 と競合し、予期しない結果が発生するためです。
アプリケーションは、次の形式で AppUserModelID を指定する必要があります。 128 文字以内で、スペースを含めることはできません。 各セクションはパスカルケースにする必要があります。
CompanyName.ProductName.SubProduct.VersionInformation
CompanyName
と ProductName
は常に使用する必要があります。一方 SubProduct
、 と VersionInformation
の部分は省略可能であり、アプリケーションの要件によって異なります。
SubProduct
では、複数のサブアプリケーションで構成されるメイン アプリケーションで、サブアプリケーションとそれに関連付けられているウィンドウごとに個別のタスク バー ボタンを提供できます。
VersionInformation
を使用すると、2 つのバージョンのアプリケーションを個別のエンティティと見なしながら共存できます。 この方法でアプリケーションを使用することを意図していない場合は、 を省略して、 VersionInformation
アップグレードされたバージョンで置き換えたバージョンと同じ AppUserModelID を使用できるようにします。
アプリケーションで 1 つ以上の明示的な AppUserModelID を使用する場合は、次の場所と状況でそれらの AppUserModelID を適用する必要があります。
アプリケーションのショートカット ファイルの System.AppUserModel.ID プロパティ。 ショートカット ( IShellLink、CLSID_ShellLink、または .lnk ファイルとして) は、シェル全体で使用される IPropertyStore およびその他のプロパティ設定メカニズムを使用してプロパティをサポートします。 これにより、タスク バーはピン留めするための適切なショートカットを識別し、プロセスに属するウィンドウがそのタスク バー ボタンに適切に関連付けられるようにします。
注意
System.AppUserModel.ID プロパティは、そのショートカットの作成時にショートカットに適用する必要があります。 Microsoft Windows インストーラー (MSI) を使用してアプリケーションをインストールする場合、 MsiShortcutProperty テーブルを使用すると、インストール時に AppUserModelID をショートカットに適用できます。
アプリケーションの実行中のウィンドウのプロパティとして。 これは、次の 2 つの方法のいずれかで設定できます。
ウィンドウ レベルの AppUserModelID は、プロセス レベルの AppUserModelID をオーバーライドします。
アプリケーションがウィンドウ レベルで明示的な AppUserModelID を設定すると、アプリケーションはタスク バー ボタンの再起動コマンドの詳細を提供できます。 この情報を提供するために、次のプロパティが使用されます。
注意
アプリケーションを起動するためのショートカットが存在する場合、アプリケーションでは、再起動プロパティを使用する代わりに、ショートカットのプロパティとして AppUserModelID を適用する必要があります。 その場合、ショートカットのコマンド ライン、アイコン、テキストを使用して、再起動プロパティと同じ情報が提供されます。
ウィンドウ レベルの明示的な AppUserModelID では、 System.AppUserModel.PreventPinning プロパティを使用して、ピン留めまたは再起動に使用できないように指定することもできます。
カスタマイズまたは更新 (ICustomDestinationList)、取得 (IApplicationDocumentLists)、またはクリア (IApplicationDestinations) アプリケーションのジャンプ リストの呼び出し。
アプリケーションが自動的に生成された最近または頻繁な宛先リストを使用する場合は、ファイル関連付けの登録 (ProgID を使用)。 この関連付け情報は 、SHAddToRecentDocs によって参照されます。 この情報は、ICustomDestinationList::AppendCategory を使用してカスタムジャンプ リストに IShellItem 変換先を追加するときにも使用されます。
任意の呼び出しで、アプリケーションは SHAddToRecentDocs に直接行います。 アプリケーションが共通ファイル ダイアログに依存して SHAddToRecentDocs を代わりに呼び出す場合、これらの呼び出しは、AppUserModelID がプロセス全体に対して設定されている場合にのみ、明示的な AppUserModelID を推測できます。 アプリケーションがプロセスではなくウィンドウで AppUserModelID を設定する場合、アプリケーションは明示的な AppUserModelID を使用して SHAddToRecentDocs 自体に対するすべての呼び出しを行い、共通ファイル ダイアログが独自の呼び出しを行わないようにする必要があります。 これは、アプリケーションのジャンプ リストの [最近] セクションまたは [ 頻繁 ] セクションが正確になるように、アイテムを開くたびに実行する必要があります。
次の項目では、一般的なシナリオと、それらのシナリオで明示的な AppUserModelID を適用する場所について説明します。
アプリケーションでは、IsHostApp レジストリ エントリを設定して、実行可能ファイルのプロセスがタスク バーによってホスト プロセスと見なされるようにすることができます。 これは、グループ化と既定のジャンプ リスト エントリに影響します。
次の例は、必要なレジストリ エントリを示しています。 エントリに値が割り当てられないことに注意してください。その存在が必要なすべてです。 REG_NULL値です。
HKEY_CLASSES_ROOT
Applications
example.exe
IsHostApp
プロセス自体またはプロセスの起動に使用されるショートカット ファイルに明示的な AppUserModelID がある場合、ホスト プロセス の一覧は無視され、アプリケーションはタスク バーによって通常のアプリケーションとして扱われます。 アプリケーションの実行中のウィンドウは、1 つのタスク バー ボタンの下にグループ化され、アプリケーションをタスク バーにピン留めできます。
実行中のプロセスの実行可能ファイル名のみがわかっていて、明示的な AppUserModelID がなく、その実行可能ファイルがホスト プロセスの一覧にある場合、プロセスの各インスタンスはタスク バーのグループ化用に個別のエンティティとして扱われます。 プロセスの特定のインスタンスに関連付けられているタスク バー ボタンには、プロセスの新しいインスタンスのピン留め/ピン留め解除オプションや起動アイコンは表示されません。 このプロセスは、[ スタート ] メニューの [最も頻繁に使用される (MFU)] の一覧にも含められません。 ただし、起動引数 (通常は "アプリケーション" としてホストするターゲット コンテンツ) を含むショートカットを使用してプロセスが起動された場合、システムは ID を決定でき、アプリケーションをピン留めして再起動できます。
アプリケーション、プロセス、およびウィンドウでは、タスク バーにピン留めしたり、[ スタート ] メニューの MFU リストに含めたりするために、それ自体を使用できないようにすることができます。 これを実現するには、次の 3 つのメカニズムがあります。
次に示すように、NoStartPage エントリをアプリケーションの登録に追加します。
HKEY_CLASSES_ROOT
Applications
Example.exe
NoStartPage
NoStartPage エントリに関連付けられているデータは無視されます。 エントリの存在のみが必要です。 したがって、NoStartPage の理想的な型はREG_NONEです。
明示的な AppUserModelID を使用すると、NoStartPage エントリがオーバーライドされることに注意してください。 明示的な AppUserModelID がショートカット、プロセス、またはウィンドウに適用されると、その ID はピン留め可能になり、[ スタート ] メニューの MFU リストの対象になります。
ウィンドウとショートカットで System.AppUserModel.PreventPinning プロパティを設定します。 このプロパティは、 PKEY_AppUserModel_ID プロパティの前にウィンドウで設定する必要があります。
次に示すように、次のレジストリ サブキーの下に、明示的な AppUserModelID を値として追加します。
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
Explorer
FileAssociation
NoStartPageAppUserModelIDs
AppUserModelID1
AppUserModelID2
AppUserModelID3
各エントリは、AppUserModelID の名前を持つREG_NULL値です。 この一覧で見つかった AppUserModelID はピン留めできず、[ スタート ] メニューの MFU リストに含める資格がありません。
特定の実行可能ファイルとその名前に特定の文字列を含むショートカットは、MFU リストへのピン留めと包含から自動的に除外されます。
注意
この自動除外は、明示的な AppUserModelID を適用することでオーバーライドできます。
大文字と小文字に関係なく、次のいずれかの文字列がショートカット名に含まれている場合、プログラムはピン留めできず、最も頻繁に使用されるリストには表示されません (Windows 10には適用されません)。
次のプログラムの一覧はピン留めできません。最も頻繁に使用される一覧から除外されます。
上記のリストは、次のレジストリ値に格納されます。
注意
これらのリストは、アプリケーションで変更しないでください。 同じエクスペリエンスに対して、前述の除外リスト メソッドのいずれかを使用します。
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
Explorer
FileAssociation
AddRemoveApps
HostApps
トレーニング
ラーニング パス
FastTrack サービス、データ管理などを使用して、財務と運用アプリの実装を成功させるためのプロジェクト方法論を計画および設計します。