INF AddSoftware ディレクティブ

AddSoftware ディレクティブは、スタンドアロン ソフトウェアのインストールを記述します。 このディレクティブは、 SoftwareComponent セットアップ クラスの INF ファイルで使用する必要があります。 ソフトウェア コンポーネントの詳細については、「コンポーネント INF ファイルの使用」を参照してください。 このディレクティブは、Windows 10 バージョン 1703 以降でサポートされています。

有効なインストールの種類は、 ターゲット プラットフォームによって異なります。 たとえば、デスクトップでは MSI インストーラーとセットアップ EXEs がサポートされます。

Note

タイプ 2 はユニバーサル ドライバーでサポートされ、タイプ 1 はデスクトップ専用です。

ソフトウェア コンポーネント INF ファイルで AddSoftwareが指定されている場合、システムはデバイスのインストール後にインストールされるソフトウェアをキューに入れます。 ソフトウェアがインストールされるタイミングやタイミングは保証されません。 参照先ソフトウェアのインストールに失敗した場合、参照元のソフトウェア コンポーネントが更新されたときにシステムが再試行されます。

AddSoftware ディレクティブは、 INF DDInstall.Software セクション内で使用されます。。

[DDInstall.Software]
AddSoftware=SoftwareName,[flags],software-install-section

エントリ

SoftwareName
インストールするソフトウェアの名前を指定します。 この名前は、INF またはセクション名に関係なく、システム全体で一意である必要があります。 AddSoftware ディレクティブの処理は、すべてのドライバー パッケージの AddSoftware ディレクティブによって同じ名前でインストールされた以前のソフトウェアに対してバージョンをチェックします。 たとえば ContosoControlPanel、ソフトウェア名の前にベンダー名を付けてお勧めします。

flags
1 つ以上の (ORed) フラグを指定します。

0x00000000
AddSoftware ディレクティブは 1 回だけ処理されます。

0x00000001
AddSoftware ディレクティブは、同じ一意の SoftwareName を持つ AddSoftware を指定するコンポーネント デバイスごとに 1 回処理されます。

たとえば、同じ INF ファイルを使用して 3 つのデバイスをインストールする構成を考えてみましょう。 ソフトウェア インストール プロセスは、 フラグ 0x00000000の場合は 1 回だけ実行されますが、 フラグ 0x00000001の場合は 3 回実行されます。

software-install-section
ソフトウェアをインストールするための情報を含む INF ライター定義セクションを参照します。

解説

INF ライターで定義された各セクション名は、INF ファイル内で一意である必要があり、セクション名を定義するための一般的な規則に従う必要があります。 これらの規則の詳細については、「INF ファイルの一般的な構文規則」を参照してください。

AddService ディレクティブは、INF ファイル内の別の場所で名前付き software-install-section を参照する必要があります。 このような各セクションの形式は次のとおりです。

[software-install-section]

SoftwareType=type-code
[SoftwareBinary=path-to-binary]
[SoftwareArguments=argument[, argument] …]
[SoftwareVersion=w.x.y.z]
[SoftwareID=pfn://x.y.z]

Note

セクションのエントリと値の制約については、「SoftwareType」を参照してください。

AddSoftware を使用してインストールされたソフトウェアは、サイレント (またはクワイエット) インストールする必要があります。 つまり、インストール中にユーザー インターフェイスをユーザーに表示することはできません。

仮想ソフトウェア コンポーネント デバイスまたはその親デバイスがアンインストールされている場合、 AddSoftware を使用してインストールされたソフトウェアはアンインストール されません。 ソフトウェアが UWP アプリではない場合 (つまり、SoftwareType が 1 の AddSoftware を使用している場合)、ユーザーがレジストリにトレースを残さずに簡単にアンインストールできることを確認してください。 そのためには次のようにします。

  • MSI インストーラーを使用している場合は、アプリケーションの Windows インストーラー パッケージで [プログラムの追加と削除] エントリを設定します。

  • ローカル デバイスの設定を補完する代わりに、グローバル レジストリ/ファイルの状態をインストールするカスタム EXE を使用している場合は、 アンインストール レジストリ キーを使用します。

Software-install-section のエントリと値

SoftwareType={type-code}
SoftwareType は、ソフトウェアのインストールの種類を指定し、必須のエントリです。

値 1 は、関連付けられているソフトウェアが MSI または EXE バイナリであることを示します。 この値を設定する場合は、 SoftwareBinary エントリも必要です。 Windows 10 S では、値 1 はサポートされていません。

SoftwareType が 1 に設定されている場合、 SoftwareBinarySoftwareVersion も必要ですが、 SoftwareArgumentsフラグ (AddSoftware ディレクティブ内) は省略可能です。

Windows 10 バージョン 1709 以降では、値 2 は、関連付けられているソフトウェアが Microsoft Store リンクであることを示します。 値 1 は、グラフィカル ユーザー インターフェイスがないデバイス固有のソフトウェアにのみ使用します。 グラフィカル要素を含むデバイス固有のアプリがある場合は、Microsoft Store から取得し、ドライバーは SoftwareType 値 2 を使用してアプリを参照する必要があります。

SoftwareType が 2 に設定されている場合は、 SoftwareID が必要であり、 フラグ (AddSoftware ディレクティブ内) は省略可能です。 SoftwareType が 2 に設定されている場合、 SoftwareBinarySoftwareVersion は使用されません。

Note

AddSoftware ディレクティブの SoftwareType 2 を使用する場合、コンポーネント INF を使用する必要はありません。 ディレクティブは、任意の INF で正常に使用できます。 ただし、種類 1 の AddSoftware ディレクティブは、コンポーネント INF から使用する必要があります。

AddSoftware を使用して、デバイスに関係のないソフトウェアを配布しないでください。 たとえば、OEM 固有の PC ユーティリティ プログラムを AddSoftware と共にインストールしないでください。 代わりに、次のいずれかのオプションを使用して、Windows 10 の OEM イメージにアプリをプレインストールします。

ドライバーと ユニバーサル Windows プラットフォーム (UWP) アプリのペアリングの詳細については、「ドライバーと ユニバーサル Windows プラットフォーム (UWP) アプリのペアリング」および「ハードウェア サポート アプリ (HSA): ドライバー開発者向けの手順」を参照してください。

SoftwareBinary={filename}
実行可能ファイルのパスが指定されます。 システムは、次のようなコマンド ラインを生成します。

MSI: msiexec /i "<SoftwareBinary>" ALLUSERS=1 /quiet /qn /promptrestart [<SoftwareArguments>]

EXE: <SoftwareBinary> [<SoftwareArguments>]

このエントリを使用する場合は、 DestinationDirs 値が 13 の INF CopyFiles ディレクティブ を指定して、実行可能ファイルを DriverStore に追加する 必要があります。

Note

SoftwareBinary のエントリと値の制約については、「SoftwareType」を参照してください。

SoftwareArguments={argument1[, argument2[, ...argumentN]]}
コマンド ラインに追加する拡張機能固有の引数を指定します。 生成されたコマンド ラインにシステムが渡すコマンド ライン引数を指定できます。 ランタイム コンテキスト変数 と呼ばれる特殊な文字列を指定することもできます。 ランタイム コンテキスト変数を指定すると、生成されたコマンド ラインに追加する前に、システムによってデバイス固有の値に変換されます。 リテラル文字列引数とランタイム コンテキスト変数を組み合わせることができます。 サポートされているランタイム コンテキスト変数は次のとおりです。

<<DeviceInstanceID>>

システムは、上記の文字列をソフトウェア コンポーネントのデバイス インスタンス ID に置き換えます。

次に例を示します。

    [DDInstall.Software]
    AddSoftware=ContosoControlPanel,,Contoso_ControlPanel_Software

    [Contoso_ControlPanel_Software]
    SoftwareType=1
    SoftwareBinary=ContosoControlPanel.exe
    SoftwareArguments=<<DeviceInstanceID>>
    SoftwareVersion=1.0.0.0

上記の例では、次のようなコマンド ラインが作成されます。

<DriverStorePath>\ContosoControlPanel.exe PCI\VEN_0000&DEV_0001&SUBSYS_00000000&REV_00\0123

SoftwareArgument に複数の引数が含まれている場合:

    SoftwareArguments=arg1,<<DeviceInstanceID>>,arg2

上記の結果は次のようになります。

<DriverStorePath>\ContosoControlPanel.exe arg1 PCI\VEN_0000&DEV_0001&SUBSYS_00000000&REV_00\0123 arg2

Note

SoftwareArguments のエントリと値の制約については、「SoftwareType」を参照してください。

SoftwareVersion={w.x.y.z}
ソフトウェアのバージョンを指定します。 各値は 65535 を超えないようにしてください。 システムは、重複する SoftwareName を検出すると、前の SoftwareVersion に対して SoftwareVersion をチェックします。 この値が大きい場合、Windows はソフトウェアを実行します。

Note

SoftwareVersion のエントリと値の制約については、「SoftwareType」を参照してください。

SoftwareID={x.y.z}
Microsoft Store の識別子と識別子の種類を指定します。 現時点では、パッケージ ファミリ名 (PFN) のみがサポートされています。 PFN を使用して、フォーム pfn://<x.y.z>を使用して ユニバーサル Windows プラットフォーム (UWP) アプリを参照します。

Note

SoftwareID のエントリと値の制約については、「SoftwareType」を参照してください。

参照

コンポーネント INF ファイルの使用

INF DDInstall.Software セクション

INF AddComponent ディレクティブ

ドライバーとユニバーサル Windows プラットフォーム (UWP) アプリとのペアリング

ハードウェア サポート アプリ (HSA): ドライバー開発者向けの手順