アプリケーションの登録
このトピックでは、アプリケーションが特定のシナリオを有効にするために必要な自身に関する情報を公開する方法について説明します。 これには、アプリケーションの検索に必要な情報、アプリケーションがサポートする動詞、およびアプリケーションで処理できるファイルの種類が含まれます。
このトピックは次のように整理されています。
注意
アプリケーションは、プログラム アクセスとコンピューターの既定値の設定 (SPAD) および既定のプログラムの設定 (SYDP) コントロール パネル アプリケーションに登録することもできます。 SPAD および SYDP アプリケーションの登録の詳細については、「 ファイルの関連付けと既定のプログラムのガイドライン」および「 プログラムのアクセスとコンピューターの既定値の設定 (SPAD)」を参照してください。
アプリケーション実行可能ファイルの検索
ShellExecuteEx 関数が lpFile パラメーター内の実行可能ファイルの名前で呼び出されると、関数がファイルを検索する場所がいくつかあります。 アプリケーションを App Paths レジストリ サブキーに登録することをお勧めします。 これにより、アプリケーションでシステム PATH 環境変数を変更する必要がなくなります。
ファイルは、次の場所で検索されます。
- 現在の作業ディレクトリ
- Windows ディレクトリのみ (サブディレクトリは検索されません)。
- Windows\System32 ディレクトリ。
- PATH 環境変数に一覧表示されているディレクトリ。
- 推奨: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\アプリ パス
アプリケーションの登録
アプリ パスとアプリケーション レジストリ サブキーの両方を使用して、アプリケーションに代わってシステムの動作を登録および制御します。 [アプリ パス] サブキーが推奨される場所です。
アプリ パス サブキーの使用
Windows 7 以降では、コンピューターごとではなく、ユーザーごとにアプリケーションをインストールすることを強くお勧めします。 ユーザーごとにインストールされるアプリケーションは、 HKEY_CURRENT_USER\ソフトウェア\Microsoft\Windows\CurrentVersion\アプリ パスに登録できます。 コンピューターのすべてのユーザー用にインストールされたアプリケーションは、 HKEY_LOCAL_MACHINE\ソフトウェア\Microsoft\Windows\CurrentVersion\アプリ パスに登録できます。
[アプリ パス] の下にあるエントリは、主に次の目的で使用されます。
- アプリケーションの実行可能ファイル名をそのファイルの完全修飾パスにマップします。
- PATH 環境変数に情報をアプリケーションごと、プロセスごとに事前にペン付けする。
App Paths のサブキーの名前がファイル名と一致する場合、シェルは次の 2 つのアクションを実行します。
- (既定値) エントリは、ファイルの完全修飾パスとして使用されます。
- そのサブキーの Path エントリは、そのプロセスの PATH 環境変数に事前にペンされます。 これが必要ない場合は、Path 値を省略できます。
注意すべき潜在的な問題は次のとおりです。
- シェルは、コマンド ラインの長さを MAX_PATH * 2 文字に制限します。 レジストリ エントリとして多数のファイルが一覧表示されている場合、またはそのパスが長い場合、コマンド ラインが切り捨てられると、一覧の後のファイル名が失われる可能性があります。
- 一部のアプリケーションでは、コマンド ラインで複数のファイル名を受け入れられません。
- 複数のファイル名を受け入れる一部のアプリケーションでは、シェルが提供する形式が認識されません。 シェルはパラメーター リストを引用符で囲まれた文字列として提供しますが、一部のアプリケーションでは引用符のない文字列が必要になる場合があります。
- ドラッグできるすべての項目がファイル システムの一部であるわけではありません。たとえば、プリンターです。 これらの項目には標準の Win32 パスがないため、意味のある lpParameters 値を ShellExecuteEx に提供する方法はありません。
DropTarget エントリを使用すると、CFSTR_SHELLIDLIST (長いファイル リストの場合) やCFSTR_FILECONTENTS (非ファイル システム オブジェクトの場合) など、すべてのクリップボード形式にアクセスできるため、これらの潜在的な問題を回避できます。
アプリ パス サブキーを使用してアプリケーションの動作を登録および制御するには:
次のレジストリ エントリに示すように、実行可能ファイルと同じ名前のサブキーを アプリ パス サブキーに追加します。
HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER SOFTWARE Microsoft Windows CurrentVersion App Paths file.exe (Default) DontUseDesktopChangeRouter DropTarget Path UseUrl
アプリ パス サブキー エントリの詳細については、次の表を参照してください。
レジストリ エントリ | 詳細 |
---|---|
(既定値)。 | アプリケーションへの完全修飾パスです。 (既定) エントリで指定されたアプリケーション名は、.exe 拡張機能の有無にかかわらず指定できます。 必要に応じて、 ShellExecuteEx 関数は 、App Paths サブキーを検索するときに拡張機能を追加します。 エントリは 、REG_SZ の種類です。 |
DontUseDesktopChangeRouter | Windows エクスプローラー プロセスのデバッグ時にファイル ダイアログのデッドロックを回避するために、デバッガー アプリケーションでは必須です。 ただし、DontUseDesktopChangeRouter エントリを設定すると、変更通知の処理の効率が若干低下します。 エントリは REG_DWORD 型であり、値は0x1。 |
DropTarget | クラス識別子 (CLSID) です。 DropTarget エントリには、 IDropTarget を実装するオブジェクト (通常はインプロセス サーバーではなくローカル サーバー) の CLSID が含まれています。 既定では、ドロップ ターゲットが実行可能ファイルであり、DropTarget 値が指定されていない場合、シェルはドロップされたファイルの一覧をコマンド ライン パラメーターに変換し、lpParameters を介して ShellExecuteEx に渡します。 |
Path |
ShellExecuteEx を呼び出してアプリケーションを起動するときに PATH 環境変数に追加する文字列 (セミコロンで区切られたディレクトリの一覧の形式) を指定します。 これは、.exe への完全修飾パスです。
これはREG_SZです。
Windows 7 以降では、型をREG_EXPAND_SZすることができ、一般に %ProgramFiles% REG_EXPAND_SZ。
メモ: シェルで認識される (既定)、パス、および DropTarget エントリに加えて、アプリケーションは実行可能ファイルの [アプリ パス] サブキーにカスタム値を追加することもできます。 アプリケーション開発者は、 アプリ パス サブキーを使用して、グローバル システム パスに追加するのではなく、アプリケーション固有のパスを指定することをお勧めします。 |
SupportedProtocols | 指定したキーの URL プロトコル スキームを含む文字列を作成します。 これには、サポートされているスキームを示す複数のレジストリ値を含めることができます。 この文字列は scheme1:scheme2 の形式に従います。 このリストが空でない場合は、 file: が文字列に追加されます。 このプロトコルは、 SupportedProtocols が定義されている場合に暗黙的にサポートされます。 |
UseUrl | アプリケーションがコマンド ラインで (ファイル名ではなく) URL を受け入れることを示します。 Web ブラウザーやメディア プレーヤーなど、インターネットから直接ドキュメントを開くことができるアプリケーションでは、このエントリを設定する必要があります。 ShellExecuteEx 関数がアプリケーションを起動し、UseUrl=1 値が設定されていない場合、ShellExecuteEx はドキュメントをローカル ファイルにダウンロードし、ローカル コピーでハンドラーを呼び出します。 たとえば、アプリケーションにこのエントリが設定されていて、ユーザーが Web サーバーに格納されているファイルを右クリックすると、Open 動詞が使用可能になります。 そうでない場合、ユーザーはファイルをダウンロードしてローカル コピーを開く必要があります。 UseUrl エントリは REG_DWORD 型で、値は0x1。 Windows Vista 以前では、このエントリは、ShellExecuteEx を介して呼び出されたときに、URL をローカル ファイル名と共にアプリケーションに渡す必要があることを示しました。 Windows 7 では、キャッシュ ファイル名も指定しなくても、アプリケーションがそれに渡される http または https URL を理解できることを示します。 このレジストリ キーは SupportedProtocols キーに 関連付けられています。 |
Applications サブキーの使用
HKEY_CLASSES_ROOT\アプリケーション\ApplicationName.exe サブキーにレジストリ エントリを含めることで、アプリケーションは次の表に示すアプリケーション固有の情報を提供できます。
レジストリ エントリ | 説明 |
---|---|
shell\verb | OpenWith からアプリケーションを呼び出すための verb メソッドを提供します。 ここで動詞定義が指定されていない場合、システムはアプリケーションが CreateProcess をサポートしていることを前提とし、コマンド ラインでファイル名を渡します。 この機能は、DropTarget、ExecuteCommand、Dynamic Data Exchange (DDE) など、すべての動詞メソッドに適用されます。 |
DefaultIcon | アプリケーションが、.exe ファイルに格納されている最初のアイコンではなく、アプリケーションを表す特定のアイコンを提供できるようにします。 |
FriendlyAppName | バージョン情報だけが表示されるのではなく、アプリケーションに対して表示するローカライズ可能な名前を取得する方法を提供します。これはローカライズできない可能性があります。 関連付けクエリ ASSOCSTR は、このレジストリ エントリ値を読み取り、バージョン情報で FileDescription 名を使用するようにフォールバックします。 その名前が見つからない場合、関連付けクエリの既定値はファイルの表示名になります。 アプリケーションでは、 ASSOCSTR_FRIENDLYAPPNAME を使用してこの情報を取得し、適切な動作を取得する必要があります。 |
SupportedTypes | アプリケーションがサポートするファイルの種類を一覧表示します。 これにより、アプリケーションが [プログラムで 開く ] ダイアログ ボックスのカスケード メニューに一覧表示されます。 |
NoOpenWith | このファイルの種類を開くアプリケーションが指定されていないことを示します。 OpenWithProgIDs サブキーがファイルの種類によってアプリケーションに設定されていて、ProgID サブキー自体にも NoOpenWith エントリがない場合、そのアプリケーションは、NoOpenWith エントリを指定した場合でも、推奨または使用可能なアプリケーションの一覧に表示されることに注意してください。 詳細については、「 How to How to Include an Application in the Open With Dialog Box」および「Open with Dialog Boxからアプリケーションを除外する方法」を参照してください。 |
IsHostApp | プロセスがホスト プロセス (Rundll32.exe や Dllhost.exe など) であることを示します。 [スタート ] メニューのピン留めまたは [最も頻繁に使用される (MFU)] の一覧に含める場合は考慮しないでください。 null 以外の引数リストまたは明示的な アプリケーション ユーザー モデル ID (AppUserModelIDs) を含むショートカットを使用して起動すると、(そのショートカットとして) プロセスをピン留めできます。 このようなショートカットは、MFU リストに含める候補です。 |
NoStartPage | アプリケーションの実行可能ファイルとショートカットを [スタート] メニューから除外し、MFU リストのピン留めまたは包含から除外する必要があることを示します。 このエントリは、通常、システム ツール、インストーラーとアンインストーラー、readme ファイルを除外するために使用されます。 |
UseExecutableForTaskbarGroupIcon | このアプリケーションのピン留め可能なショートカットがない場合、最初に見つかったウィンドウのアイコンではなく、タスク バーでこの実行可能ファイルの既定のアイコンを使用します。 |
TaskbarGroupIcon | タスク バー アイコンをオーバーライドするために使用するアイコンを指定します。 通常、ウィンドウ アイコンはタスク バーに使用されます。 TaskbarGroupIcon エントリを設定すると、システムはアプリケーションの .exe のアイコンを代わりに使用します。 |
例
HKEY_CLASSES_ROOT\Applications\ApplicationName.exe サブキーを使用したアプリケーション登録の例を次に示します。 すべてのレジストリ エントリの値は REG_SZ 型です。 DefaultIcon は除き、 REG_EXPAND_SZ 型です。
HKEY_CLASSES_ROOT
Applications
wordpad.exe
FriendlyAppName = @%SystemRoot%\System32\shell32.dll,-22069
HKEY_CLASSES_ROOT
Applications
wmplayer.exe
SupportedTypes
.3gp2
HKEY_CLASSES_ROOT
Applications
wmplayer.exe
DefaultIcon
(Default) = %SystemRoot%\system32\wmploc.dll,-730
HKEY_CLASSES_ROOT
Applications
WScript.exe
NoOpenWith
HKEY_CLASSES_ROOT
Applications
photoviewer.dll
shell
open
DropTarget
Clsid = {FFE2A43C-56B9-4bf5-9A79-CC6D4285608A}
HKEY_CLASSES_ROOT
Applications
mspaint.exe
SupportedTypes
.bmp
.dib
.rle
.jpg
.jpeg
.jpe
.jfif
.gif
.emf
.wmf
.tif
.tiff
.png
.ico
動詞とその他のファイルの関連付け情報の登録
HKEY_CLASSES_ROOT\SystemFileAssociations の下に登録されたサブキーを使用すると、シェルでファイルの種類の属性の既定の動作を定義し、共有ファイルの関連付けを有効にすることができます。 ユーザーがファイルの種類の既定のアプリケーションを変更すると、新しい既定のアプリケーションの ProgID は動詞やその他の関連付け情報を提供する際に優先されます。 この優先順位は、関連付け配列の最初のエントリであることが原因です。 既定のプログラムが変更された場合、以前の ProgID の情報は使用できなくなります。
既定のプログラムに対する変更の結果に事前に対処するには、 HKEY_CLASSES_ROOT\SystemFileAssociations を使用して動詞やその他の関連付け情報を登録できます。 関連付け配列内の ProgID の後の位置により、これらの登録の優先度は低くなります。 これらの SystemFileAssociationsregistrations は、ユーザーが既定のプログラムを変更した場合でも安定しており、特定のファイルの種類で常に使用できるセカンダリ動詞を登録する場所を提供します。 レジストリの例については、このトピックで後述 する「認識型の登録 」を参照してください。
次のレジストリ例は、ユーザーが コントロール パネル で [既定のプログラム] 項目を実行して、.mp3 ファイルの既定値を App2ProgID に変更した場合の動作を示しています。 既定値を変更すると、Verb1 は使用できなくなり、Verb2 が既定値になります。
HKEY_CLASSES_ROOT
.mp3
(Default) = App1ProgID
HKEY_CLASSES_ROOT
App1ProgID
shell
Verb1
HKEY_CLASSES_ROOT
App2ProgID
shell
Verb2
認識型の登録
認識される型のレジストリ値は、 HKEY_CLASSES_ROOT\SystemFileAssociations レジストリ サブキーのサブキーとして定義されます。 たとえば、認識される型 テキスト は次のように登録されます。
HKEY_CLASSES_ROOT
SystemFileAssociations
text
shell
edit
command
(Default) = "%SystemRoot%\system32\NOTEPAD.EXE" "%1"
open
command
(Default) = "%SystemRoot%\system32\NOTEPAD.EXE" "%1"
ファイルの種類の認識型は、ファイルの種類のサブキーに PerceivedType 値を含めることで示されます。 PerceivedType 値は、前のレジストリ例に示すように、systemFileAssociations レジストリ サブキー HKEY_CLASSES_ROOT\登録されている認識型の名前に設定されます。 たとえば、.cpp ファイルを認識される型 "text" として宣言するには、次のレジストリ エントリを追加します。
HKEY_CLASSES_ROOT
.cpp
PerceivedType = text