既定のプログラム

既定のユーザー エクスペリエンスを設定するには、既定のプログラムを使用します。 ユーザーは、コントロール パネルまたは [スタート] メニューから直接既定のプログラムにアクセスできます。 Windows XP のユーザーの主な既定のエクスペリエンスであるプログラム アクセスとコンピューターの既定値 (SPAD) ツールの設定は、既定のプログラムの 1 つの部分になりました。

重要

このトピックは、Windows 10には適用されません。 Windows 10で既定のファイルの関連付けが変更された方法。 詳細については、この記事「Windows 10が既定のアプリを処理する方法の変更」のセクションを参照してください。

 

ユーザーが 既定のプログラムを使用してプログラムの既定値を設定する場合、既定の設定はそのユーザーにのみ適用され、同じコンピューターを使用する可能性がある他のユーザーには適用されません。 既定のプログラムには、独立系ソフトウェア ベンダー (ISV) が既定のシステムにプログラムまたはアプリケーションを含める一連の API (Windows 8で非推奨) が用意されています。 API セットは、ISV が既定として状態をより適切に管理するのにも役立ちます。

このトピックは次のように整理されています。

既定のプログラム は、主に、.mp3や.jpg ファイルなどの標準的なファイルの種類、または HTTP や mailto などの標準プロトコルを使用するアプリケーション向けに設計されています。 独自の独自のプロトコルとファイルの関連付けを使用するアプリケーションでは、通常、既定の プログラム 機能は使用されません。

アプリケーションを既定のプログラム機能に登録すると、API セットを使用して次のオプションと機能を使用できるようになります。

  • アプリケーションに対して登録されているすべての既定値を復元します。 Windows 8では非推奨です。
  • アプリケーションの 1 つの登録済み既定値を復元します。 Windows 8では非推奨です。
  • レジストリを検索する代わりに、1 回の呼び出しで特定の既定値の所有者を照会します。 ファイルの関連付け、プロトコル、または [スタート] メニューの正規動詞の既定のクエリを実行できます。
  • ユーザーが個々の既定値を設定できる特定のアプリケーションの UI を起動します。
  • すべてのユーザーごとの関連付けを削除します。

既定のプログラム には、ユーザーに追加情報を提供するためにアプリケーションを登録できる UI も用意されています。 たとえば、デジタル署名されたアプリケーションには、製造元のホーム ページへの URL を含めることができます。

関連付けられている API セットを使用すると、Windows Vista で導入されたユーザー アカウント制御 (UAC) 機能の下でアプリケーション機能を正しく機能させることができます。 UAC では、管理者は標準ユーザーとしてシステムに表示されるため、管理者は通常 、HKEY_LOCAL_MACHINE サブツリーに書き込むことができません。 この制限は、管理者の知らない間にプロセスが管理者として機能することを防ぐセキュリティ機能です。

ユーザーによるプログラムのインストールは、通常、昇格されたプロセスとして実行されます。 ただし、インストール後にコンピューター レベルで既定の関連付け動作を変更しようとすると、アプリケーションが失敗します。 代わりに、既定値をユーザー単位レベルで登録する必要があります。これにより、複数のユーザーが互いの既定値を上書きできなくなります。

ファイルとプロトコルの関連付けの階層レジストリ構造は、コンピューター レベルの既定値よりもユーザーごとの既定値よりも優先されます。 一部のアプリケーションには、HKEY_LOCAL_MACHINEに登録されている既定値を要求するときに一時的に権限を昇格させるポイントが コードに含まれています。 別のアプリケーションが既にユーザーごとの既定値として登録されている場合、これらのアプリケーションで予期しない結果が発生する可能性があります。 既定の プログラム を使用すると、このあいまいさが回避され、ユーザーごとのレベルで期待される結果が保証されます。

既定のプログラムで使用するアプリケーションの登録

このセクションでは、 アプリケーションを既定のプログラムに登録するために必要なレジストリ サブキーと値を示します。 完全な例が含まれています。

このセクションのトピックは次のとおりです。

既定のプログラム では、各アプリケーションで、可能な既定値としてアプリケーションを一覧表示する必要があるファイルの関連付け、MIME の関連付け、プロトコルを明示的に登録する必要があります。 関連付けを登録するには、次のレジストリ要素を使用します。詳細については、このトピックの「 Registration Subkey and Value Descriptions(登録サブキーと値の説明)」で後述します。

HKEY_LOCAL_MACHINE
   %ApplicationCapabilityPath%
      ApplicationDescription
      ApplicationName
      Hidden
      FileAssociations
         .file-extension1
         .file-extension2
         ...
         .file-extensionX
      MIMEAssociations
         MIME
      Startmenu
         StartmenuInternet
         Mail
      UrlAssociations
         url-scheme
   SOFTWARE
      RegisteredApplications
         Unique Application Name = %ApplicationCapabilityPath%

次の例は、WebBrowser と呼ばれる架空の Contoso ブラウザーのレジストリ エントリを示しています。

HKEY_LOCAL_MACHINE
   SOFTWARE
      Contoso
         WebBrowser
            Capabilities
               ApplicationDescription = This award-winning Contoso browser is better than ever. Search the Internet and find exactly what you want in just seconds. Use integrated tabs and new phishing detectors to enhance your Internet experience.
               FileAssociations
                  .htm = ContosoHTML
                  .html = ContosoHTML
                  .shtml = ContosoHTML
                  .xht = ContosoHTML
                  .xhtml = ContosoHTML
               Startmenu
                  StartmenuInternet = Contoso.exe
               UrlAssociations
                  http = Contoso.Url.Http
                  https = Contoso.Url.Https
                  ftp = Contoso.Url.ftp
   SOFTWARE
      RegisteredApplications
         Contoso.WebBrowser.1.06 = SOFTWARE\Contoso\WebBrowser\Capabilities

Progid

アプリケーションは、特定の ProgID を提供する必要があります。 拡張機能の一般的な既定のサブキーに通常書き込まれるすべての情報を含めるようにしてください。 たとえば、架空の Litware メディア プレーヤーは、アプリケーション固有の HKEY_LOCAL_MACHINE\SOFTWARE\Classes\LitwarePlayer11.AssocFile.MP3 サブキーを提供します。 そのサブキーには、汎用の既定のサブキー HKEY_LOCAL_MACHINESOFTWARE\Classes\.mp3\のすべての情報と、アプリケーションで登録する追加情報が含まれます。 これにより、ユーザーが Litware プレーヤーに.mp3の関連付けを復元した場合、Litware プレーヤーの情報はそのままであり、別のアプリケーションによって上書きされていないことが保証されます。 (既定のサブキーがその情報の唯一のソースである場合、上書きが発生する可能性があります)。

ProgID をファイル名拡張子またはプロトコルにマップすると、アプリケーションは一対一または一対多にマップできます。 Contoso の例では、ContosoHTML は、.htm、.html、.shtml、.xht、および .xhtml 拡張機能のシェル実行情報を提供する 1 つの ProgID を指しています。 プロトコルごとに異なる ProgID が存在するため、プロトコルを使用する場合は、各プロトコルが独自の実行文字列を持つよう有効にします。

ブラウザーで MIME の種類をインラインで表示できる場合、MIME の種類の ProgID には、対応するアプリケーションのクラス識別子 ( CLSID ) を使用する CLSID サブキーが含まれている必要があります。 この CLSID は、HKEY_LOCAL_MACHINESOFTWARE\Classes\ MIMEデータベース\コンテンツ タイプに格納されているMIME\ データベース内の CLSID に対するルックアップで\使用されます。 MIME の種類がブラウザーでインラインで表示されることを意図していない場合は、この手順を省略できます。

登録サブキーと値の説明

このセクションでは、前述のように、アプリケーションを 既定のプログラムに登録する際に使用される個々のレジストリ サブキーと値について説明します。

機能

Capabilities サブキーには、特定のアプリケーションのすべての既定のプログラム情報が含まれています。 プレースホルダー %ApplicationCapabilityPath% は、 HKEY_CURRENT_USER または HKEY_LOCAL_MACHINE からアプリケーションの Capabilities サブキーへのレジストリ パスを参照します。 このサブキーには、次の表に示す重要な値が含まれています。

Type 説明
ApplicationDescription REG_SZまたはREG_EXPAND_SZ [必須] 。 ユーザーが情報に基づいた既定の割り当てを選択できるようにするには、アプリケーションでアプリケーションの機能を説明する文字列を指定する必要があります。 前の Contoso の例では、説明を ApplicationDescription 値に直接割り当てますが、通常、アプリケーションは、ローカライズを容易にするために.dll ファイルに埋め込まれるリソースとして説明を提供します。 ApplicationDescription が指定されていない場合、アプリケーションは潜在的な既定のプログラムの UI リストには表示されません。
ApplicationName REG_SZまたはREG_EXPAND_SZ 省略可能。 既定のプログラム UI にプログラムが表示される名前。 このデータがアプリケーションによって提供されない場合は、アプリケーションの最初に登録された ProgID に関連付けられている実行可能プログラムの名前が UI で使用されます。 ApplicationName は、 RegisteredApplications で登録されている名前と常に一致する必要があります。 ApplicationName は、ブラウザーや電子メール クライアントなど、異なる種類のアプリケーションが同じ実行可能ファイルを指し示しながら、異なる名前として表示されるようにする場合に使用できます。
[非表示] REG_DWORD 省略可能。 この値を 1 に設定すると、[既定のプログラムの設定] ダイアログのプログラムの一覧からアプリケーション 非表示になります。 この値が 0 の場合、または存在しない場合、アプリケーションは通常どおり一覧に表示されます。

 

FileAssociations

FileAssociations サブキーには、アプリケーションによって要求される特定のファイル関連付けが含まれています。 これらの要求は値として格納され、拡張機能ごとに 1 つの値が格納されます。 関連付けは、汎用 ProgID ではなく、アプリケーション固有の ProgID を指します。 ただし、すべての関連付けは、同じ ProgID を指す必要はありません。

MIMEAssociations

MIMEAssociations サブキーには、アプリケーションによって要求される特定の MIME の種類が含まれています。 これらの要求は、MIME の種類ごとに 1 つの値を持つ値として格納されます。 各 MIME の種類の値名は、MIME データベースに格納されている MIME 名と正確に一致している必要があります。 値には、アプリケーションの対応する CLSID を含むアプリケーション固有の ProgID も割り当てる必要があります。

Startmenu

Startmenu サブキーは、[スタート] メニューのユーザー割り当て可能なインターネットおよび電子メール エントリに関連付けられます。 アプリケーションは、これらのエントリの候補として個別に登録する必要があります。 詳細については、「 クライアントの種類を使用したプログラムの登録」を参照してください。

注意

Windows 7 の時点で、[スタート] メニューにインターネット電子メールのエントリが表示されなくなります。 電子メール エントリに関連付けられているレジストリ データは、既定の MAPI クライアントで引き続き使用されますが、インターネット エントリに関連付けられているレジストリ データは Windows ではまったく使用されません。

 

アプリケーションの [スタート ] メニューの登録を 既定のプログラム の登録に関連付けることで、アプリケーションは [ 関連付けの設定 ] UI で既定の可能性として表示されます。 ユーザーがアプリケーションを既定として選択し、後ですべてのアプリケーションの既定値を復元することを選択した場合、アプリケーションはそのユーザーの [スタート] メニューの位置に復元されます。 詳細と図については、このトピックで後述する 「既定のプログラム UI 」セクションを参照してください。

Startmenu サブキーには、StartMenuInternet と Mail という 2 つのエントリがあります。これは、[スタート] メニューの正規のインターネット電子メールの位置に対応します。 アプリケーションは、StartMenuInternet または Mail のいずれかの値を、HKEY_LOCAL_MACHINESOFTWAREClientsStartMenuInternet または HKEY_LOCAL_MACHINE\\SOFTWARE\\Clients\\Mail の下にあるアプリケーションの登録済みサブキーの名前と同じ値に割り当てます (「クライアントの種類を使用したプログラムの登録」を参照)。

[スタート] メニューの電子メールの正規の位置の場合、既定の MAPI クライアントを表し、MAPI 呼び出しを渡すことができると見なされます。 Windows 7 では、[スタート] メニューに電子メールの正規の位置が表示されなくなりましたが、このサブキーは引き続き既定の MAPI クライアントに使用されます。 メールの既定値を要求するアプリケーションは、次のサブキーの下に MAPI ハンドラーとして登録する必要があります。

HKEY_LOCAL_MACHINE
   SOFTWARE
      Clients
         Mail
            CanonicalName

メール クライアントが MAPI をサポートできないが、 それでも [スタート ] メニュー の [電子メール の正規の位置] に競合する場合は、次のサブキーの下にコマンド ラインを登録できます。

HKEY_LOCAL_MACHINE
   SOFTWARE
      Clients
         Mail
            CanonicalName
               shell
                  open
                     command

また、[ HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\CanonicalName ] の下に、アプリケーション名の既定値を追加します。

これらのエントリを使用すると、[ スタート ] メニューの [電子メール ] の位置からアプリケーションを起動できます。 MAPI 呼び出しは引き続きアプリケーションに対して行われ、以前の MAPI ハンドラーに分類されるか、MAPI ハンドラーが設定されていない場合は失敗します。 詳細については、「 クライアントの種類を使用したプログラムの登録」を参照してください。

UrlAssociations

UrlAssociations サブキーには、アプリケーションによって要求される特定の URL プロトコルが含まれています。 これらの要求は、プロトコルごとに 1 つの値を持つ値として格納されます。 各プロトコルは、汎用 ProgID ではなく、アプリケーション固有の ProgID を指す必要があります。 Contoso の例で説明したように、プロトコルごとに異なる ProgID を使用して、それぞれが独自の実行文字列を持つことができます。

RegisteredApplications

RegisteredApplications の完全なサブキーは次のとおりです。

Hkey_local_machine\ソフトウェア\RegisteredApplications

このサブキーは、アプリケーションの 既定のプログラム 情報のレジストリの場所をオペレーティング システムに提供します。 場所は、名前がアプリケーションの名前と一致する必要がある値として格納されます。

完全登録の例

この例では、架空の Litware メディア プレーヤーの登録に使用されるサブキーと値を示します。 この例では、ProgID エントリを含め、すべてがどのように一緒に収まるかを示します。

次のサブキーは、.mp3 MIME の種類のアプリケーション固有の ProgID を示しています。

HKEY_LOCAL_MACHINE
   SOFTWARE
      Classes
         LitwarePlayer11.MIME.MP3
            CLSID
               (Default) = {CD3AFA76-B84F-48F0-9393-7EDC34128127}

次に、Litwareプログラムを.mp3ファイル名拡張子に関連付けるアプリケーション固有のProgIDです。

HKEY_LOCAL_MACHINE
   SOFTWARE
      Classes
         LitwarePlayer11.AssocFile.MP3
            (Default) = MP3 Format Sound
            DefaultIcon
               (Default) = %ProgramFiles%\Litware\litware.dll, 0
            shell
               open
                  command
                     (Default) = %ProgramFiles%\Litware\litware.exe

次のエントリは、.mpeg MIME の種類とファイル名拡張子の両方に対して組み合わされた ProgID を示しています。

HKEY_LOCAL_MACHINE
   SOFTWARE
      Classes
         LitwarePlayer11.AssocFile.MPG
            (Default) = Movie Clip
            CLSID
               (Default) = {D92B76F4-CFA0-4b93-866B-7730FEB4CD7B}
            DefaultIcon
               (Default) = %ProgramFiles%\Litware\litware.dll, 0
            shell
               open
                  command
                     (Default) = %ProgramFiles%\Litware\litware.exe

次のエントリは、 Litware プログラムを既定のプログラムに登録し、以前に登録した ProgID を使用します

HKEY_LOCAL_MACHINE
   SOFTWARE
      Litware
         LitwarePlayer
            Capabilities
               ApplicationDescription = The new Litware Media Player breaks new ground in exciting fictional programs.
               FileAssociations
                  .mp3 = LitwarePlayer11.AssocFile.MP3
                  .mpeg = LitwarePlayer11.AssocFile.MPG
               MimeAssociations
                  audio/mp3 = LitwarePlayer11.MIME.MP3
                  audio/mpeg = LitwarePlayer11.AssocFile.MPG

最後に、この例では Litware の既定のプログラム 登録の場所を登録します。

HKEY_LOCAL_MACHINE
   SOFTWARE
      RegisteredApplications
         Litware Player = Software\Litware\LitwarePlayer\Capabilities

既定のブラウザーになる

ブラウザーの登録は、このトピックで説明されているベスト プラクティスに従う必要があります。 ブラウザーがインストールされると、Windows はユーザーにシステム通知を表示し、ユーザーはシステムの既定値としてブラウザーを選択できます。 この通知は、次の条件が満たされたときに表示されます。

  • ブラウザーのインストーラーは、新しいプロトコル ハンドラーが登録されたことを Windows に通知するために、SHCNE_ASSOCCHANGED フラグを使用して SHChangeNotify を呼び出します。
  • Windows は、http:// プロトコルと https:// プロトコルの両方を処理するために 1 つ以上の新しいアプリケーションが登録され、ユーザーにまだ通知されていないことを検出します。 つまり、アプリケーションをアドバタイズするシステム通知、アプリケーションを含む OpenWith ポップアップ、またはアプリケーションの [ユーザーの既定値の設定 (SUD) コントロール パネル ページ) は、ユーザーに表示されていません。

次の例は、ブラウザーのインストーラーがレジストリ キーを書き込んだ後に実行する必要がある推奨登録コードを示しています。

SHChangeNotify は、最初に、新しい関連付けの選択肢が使用可能であることをシステムに通知します。 SHChangeNotify 呼び出しは、システムの既定値が正しく機能していることを確認するために必要です。

Sleep ステートメントを 使用すると、システム プロセスが通知を処理する時間が許可されます。

void NotifySystemOfNewRegistration()
{
    SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_DWORD | SHCNF_FLUSH, nullptr, nullptr);
    Sleep(1000);
}

ユーザーが新しい既定のブラウザー選択を行わずに結果の通知またはポップアップを無視または無視した場合、既定のブラウザーは変更されません。 また、ユーザーは、コントロール パネルの [ユーザーの既定値の設定] など、他のメカニズムを使用して、いつでも既定のブラウザーを変更できることに注意してください。

既定のプログラム UI

このセクションの図は、ユーザーが見た 既定のプログラム の UI を示しています。

次の図は、コントロール パネルの [既定のプログラムのメイン] ウィンドウを示しています。

既定のプログラム エントリ ページのスクリーン ショット

ユーザーが [ 既定のプログラムの設定 ] オプションを選択すると、次のウィンドウが表示されます。 ユーザーはこのページを使用して、プログラムが既定の可能性があるすべてのファイルの種類とプロトコルに既定のプログラムを割り当てることができます。 次の図に示すように、 すべての登録済み プログラムとプログラム アイコンが左側の [ プログラム ] ボックスに表示されます。

[既定のプログラムの設定] ページのスクリーン ショット

ユーザーが一覧からプログラムを選択すると、プログラム アイコンとプロバイダーが表示されます。 URL がプログラムのデジタル署名された証明書に埋め込まれている場合、プログラムは URL を表示することもできます。 デジタル署名されていないプログラムは、URL を表示できません。

登録時にプログラムによって提供される説明テキストも表示されます。 このテキストは必須です。 説明ボックスの下には、プログラムが現在、処理するために登録されている完全な番号から割り当てられている既定値の数が示されます。

登録されているすべてのファイルとプロトコルの既定値としてプログラムを割り当てるか復元するには、ユーザーは [ このプログラムを既定に設定 する] オプションをクリックします。

プログラムに個々のファイルの種類とプロトコルを割り当てるには、[ このプログラムの既定値を選択 する] オプションをクリックします。このオプションを選択すると、次の図のようなプログラム ウィンドウの [関連付けの設定 ] が表示されます。

注意

IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI を使用して、プログラムの関連付けを設定することをお勧めします。

 

プログラム ページの関連付けの設定のスクリーン ショット

既定のプログラムを使用するためのベスト プラクティス

このセクションでは、アプリケーションを登録するときに 既定のプログラム を使用するためのベスト プラクティスガイドラインを示します。 また、最適な 既定のプログラム 機能をユーザーに提供するアプリケーションを作成するための設計提案も提供します。

インストール中

Windows XP で通常実行されるインストール手順に加えて、Windows Vista 以降のベースのアプリケーションは、その機能を利用するために 既定のプログラム 機能に登録する必要があります。

インストール中に、次の一連の手順を実行します。 手順 1 から 3 は、Windows XP で使用された手順と一致します。手順 4 は Windows Vista の新機能でした。

  1. 必要なバイナリ ファイルをインストールします。
  2. ProgIDs をHKEY_LOCAL_MACHINEに書き込みます。 アプリケーションでは、関連付けに対してアプリケーション固有の ProgID を作成する必要があることに注意してください。
  3. 既定のプログラム で使用するアプリケーションの登録」で説明したように 、アプリケーションを既定のプログラムに登録します

インストール後

このセクションでは、アプリケーション プロンプトが最初に各ユーザーに既定のオプションを表示する方法について説明します。 また、アプリケーションがその状態を、考えられる関連付けとプロトコルの既定値として監視する方法についても説明します。

初回実行エクスペリエンス

ユーザーがアプリケーションを初めて実行する場合は、通常、次の 2 つの選択肢を含む UI をユーザーに表示することをお勧めします。

  • 既定のアプリケーション設定をそのまま使用します。 既定では、このオプションはオンです。
  • 既定のアプリケーション設定をカスタマイズします。

Windows 8する前に、ユーザーが既定の設定を受け入れる場合、アプリケーションは IApplicationAssociationRegistration::SetAppAsDefaultAll を呼び出します。これにより、インストール時に宣言されたすべてのマシン レベルの関連付けが、そのユーザーのユーザーごとの設定に変換されます。

ユーザーが設定をカスタマイズする場合、アプリケーションは IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI を呼び出してファイル関連付け UI を表示します。 次の図は、架空の Litware メディア プレーヤーのこのウィンドウを示しています。

litware のプログラム ページの関連付けの設定のスクリーン ショット

ファイル関連付けウィンドウには、アプリケーションが登録した既定値が表示され、他の拡張機能とプロトコルの現在の既定値も表示されます。 ユーザーが既定値のカスタマイズを完了したら、[ 保存 ] ボタンをクリックして変更をコミットします。 ユーザーが [キャンセル] をクリックすると、変更を保存せずにウィンドウが閉じます。

独自の UI を作成する代わりに、この UI をアプリケーションに使用する必要があります。 これにより、ファイル関連付け UI の開発に以前必要だったリソースを保存できます。 また、関連付けが正しく保存されていることも保証します。

アプリケーションが既定であるかどうかを確認するように設定する

注意

これは、Windows 8時点ではサポートされなくなりました。

 

通常、アプリケーションは、実行時に既定値として設定されるかどうかをチェックします。 IApplicationAssociationRegistration::QueryAppIsDefault または IApplicationAssociationRegistration::QueryAppIsDefaultAll を呼び出して、このチェックするようにアプリケーションを設定します。

アプリケーションが既定でないと判断した場合は、現在の状況を受け入れるか、アプリケーションを既定にするかをユーザーに尋ねる UI を表示できます。 既定で選択され、再び要求されないオプションを示すチェック ボックスをこの UI に常に含めます。

注意

既定値の選択は、ユーザー主導である必要があります。 アプリケーションは、ユーザーに問い合わせることなく、既定値を再利用しないでください。

 

次の図は、ダイアログ ボックスの例を示しています。

ダイアログ ボックスの例のスクリーン ショット

その他のリソース

ファイルの関連付けのベスト プラクティス

ファイル関連付けのサンプル シナリオ

Windows Vista 以降で既定のアプリケーションを管理するためのガイドライン

プログラム アクセスとコンピューターの既定値の設定 (SPAD)