既定のプログラム

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

重要

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

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

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

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

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

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

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

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

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

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

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

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

このセクションでは、以下のトピックについて説明します。

既定のプログラム では、アプリケーションを既定として使用できるように、ファイルの関連付け、MIME アソシエーション、およびプロトコルを明示的に登録する必要があります。 アソシエーションを登録するには、次のレジストリ要素を使用します。詳細については、このトピックで後述する「 登録サブキーと値の説明」を参照してください。

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 media player は、アプリケーション固有の HKEY _ ローカル _ マシン \ ソフトウェア \ クラス \ LitwarePlayer11.AssocFile.MP3 サブキーを提供します。 このサブキーには、汎用の既定のサブキー HKEY _ ローカル _ コンピューター ソフトウェアクラスのすべての情報が含まれてい \ \ \ ます。 mp3 には、アプリケーションで登録する追加情報が含まれています。 これにより、ユーザーが .mp3 の関連付けを Litware player に復元した場合、Litware player の情報はそのままで、別のアプリケーションによって上書きされていません。 (既定のサブキーがその情報の唯一のソースである場合、上書きが発生する可能性があります。)

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

ブラウザーで MIME の種類をインライン表示できる場合、MIME の種類の ProgID には、対応するアプリケーションのクラス識別子 (CLSID) を使用する clsid サブキーが含まれている必要があります。 この clsid は、mime データベースの CLSID に対する参照で使用されます。この clsid は、 HKEY _ LOCAL _ MACHINE \ SOFTWARE \ Classes \ mime \ database \ コンテンツタイプ に格納されています。 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 サブキーは、[スタート] メニューのユーザーが割り当て可能な インターネット および 電子メール エントリに関連付けられています。 アプリケーションは、これらのエントリの候補として個別に登録する必要があります。 詳細については、「 クライアントの種類にプログラムを登録する」を参照してください。

注意

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

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

Startmenu サブキーには、Startmenuinternet と Mail の2つのエントリがあります。これは、[スタート] メニューの正規の インターネット電子メール の位置に対応します。 アプリケーションでは、アプリケーションの登録されたサブキーの名前と同じ値が、startmenuinternet または mail に割り当てられます。この値は、[ hkey _ local _ machine \ software \ clients \ startmenuinternet または 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 _ローカル _ コンピューター \ ソフトウェア の \ registeredapplications

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

完全な登録の例

この例は、架空の Litware media player の登録に使用されるサブキーと値を示しています。 この例には、すべてがどのように組み合わされているかを示すための 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

既定のブラウザーになる

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

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

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

SHChangeNotify は、新しいアソシエーション選択が使用可能であることをシステムに通知します。 システムの既定値が正しく機能するようにするには、 SHChangeNotify 呼び出しが必要です。

次に、 スリープ ステートメントを使用して、システムプロセスが通知を処理する時間を許可します。

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

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

既定のプログラムの UI

このセクションの図は、ユーザーに表示される 既定のプログラム の UI を示しています。

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

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

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

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

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

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

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

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

注意

Iapplicationassociationregistrationui:: Launchadvanced associationuiを使用して、プログラムの関連付けの設定 を呼び出すことをお勧めします。

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

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

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

インストール中

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

インストール中に次の一連の手順を実行します。 手順1-3 は、Windows XP で使用されていた手順に一致します。手順4は、Windows Vista で新しく追加されたものです。

  1. 必要なバイナリファイルをインストールします。
  2. Progid を HKEY _ ローカルコンピューターに書き込み _ ます。 アプリケーションでは、アプリケーション固有の Progid を関連付け用に作成する必要があることに注意してください。
  3. アプリケーションを既定の プログラム に登録します。これについては 、「アプリケーションを既定のプログラムで使用するための登録」で説明しています。

インストール後

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

最初の実行エクスペリエンス

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

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

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

ユーザーが設定をカスタマイズすることにした場合、アプリケーションは Iapplicationassociationregistrationui:: Launchadvanced associationui を呼び出して、ファイルの関連付け ui を表示します。 次の図は、架空の Litware media player のこのウィンドウを示しています。

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

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

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

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

注意

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

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

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

注意

既定の選択は、[ユーザー側で行う必要があります。 アプリケーションでは、ユーザーに確認することなく既定のを再利用することはできません。

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

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

その他のリソース

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

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

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

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