変更パッケージを使用してエンタープライズ アプリをカスタマイズする

特に企業においては、アプリケーションのエクスペリエンスをカスタマイズする機能が重要になります。 IT プロフェッショナルの声から、ユーザーのニーズに合わせてアプリケーションをカスタマイズすることが、Windows 10 への移行に向けた取り組みに不可欠であることが分かっています。 MSI を使用してパッケージ化されたアプリケーションをカスタマイズする場合、IT プロフェッショナルは開発者からパッケージを取得し、ニーズに合わせてカスタマイズしたインストーラーを再パッケージ化しなければならないことはよく知られています。 これは企業にとってコストのかかる作業です。 今後は、カスタマイズとメイン アプリケーションを分離して、再パッケージ化が不要になるようにしたいと考えています。 これにより、企業は、確実にカスタマイズの制御を維持しながら、開発者から最新の更新プログラムを取得できるようになります。

Windows 10 バージョン 1809 では、変更パッケージと呼ばれる新しいタイプの MSIX パッケージが導入されました。 変更パッケージは、カスタマイズを格納する MSIX パッケージです。 変更パッケージは、ライセンス認証ポイントがない可能性のあるプラグイン/アドオンにもなり得ます。 IT プロフェッショナルは、この機能を使用して MSIX コンテナーを柔軟に変更し、企業のカスタマイズによってアプリケーションをオーバーレイさせることが可能です。

しくみ

変更パッケージは、アプリケーションのコードを持たず、インストーラーのみを持つ企業向けに設計されています。 変更パッケージは、MSIX Packaging Tool の最新バージョン (Windows 10 バージョン 1809 以降) を使用して作成できます。 アプリケーションのコードがある場合は、代わりにアプリ拡張機能を作成することもできます。

メイン アプリへの厳密なバインドがある変更パッケージを作成する場合は、変更パッケージのマニフェストの依存関係としてメイン アプリを宣言できます。

<Dependencies>
    <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.15063.0"/>
    <uap4:MainPackageDependency Name="Main.App"/>
</Dependencies>

次の例では、別の証明書または発行元を指定する方法を示します。

<Dependencies>
    <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.15063.0"/>
    <uap4:MainPackageDependency Name="Main.App" Publisher="CN=Contoso, C=US" />
</Dependencies>

これは、変更パッケージとメイン パッケージ間の関係が 1 対 1 の場合の単純な構成です。 一般的なカスタマイズでは、HKEY_CURRENT_USER または HKEY_CURRENT_USERCLASS の下にレジストリ キーが必要になることがよくあります。 MSIX パッケージ内には、レジストリ キーをキャプチャするための User.dat ファイルと Userclass.dat ファイルが用意されています。 HKCU\Software* の下にレジストリ キーが必要な場合 (HKLM\Software* に使用される Registry.dat のように)、User.dat を作成する必要があります。 HKCU\Sofware\Classes* の下にキーが必要な場合は、Userclass.dat を使用します。

次に .dat ファイルを作成する一般的な方法を示します。

  • Regedit を使用してファイルを作成する。 Regedit で Hive を作成し、必要なキーを挿入します。 次に右クリックして、[エクスポート] を選び、hive ファイルとして保存します。 ファイル名は、必ず User.dat または Userclass.dat のいずれかにしてください

  • API を使用して、必要なファイルを作成する。 ORSaveHive 関数を使用すると、.dat ファイルを保存できます。 ファイル名は、必ず User.dat または Userclass.dat のいずれかにしてください

必要な変更を加えたら、他のあらゆる MSIX パッケージと同様に、変更パッケージを作成できます。 その後、現在のデプロイ設定を使用してパッケージをデプロイできます。 メイン アプリを再起動すると、変更パッケージによって行われた変更が表示されます。 変更パッケージを削除することを選択した場合、メイン アプリは変更パッケージがない状態に戻ります。

デバイスにインストールされている変更パッケージを確認する

PowerShell を使用すると、次のコマンドを使用して、インストールされた変更パッケージを確認できます。

Get-AppPackage -PackageTypeFilter Optional

Windows 10、バージョン 1809 の変更パッケージ

Windows 10、バージョン 1809 では、メイン パッケージが想定どおりに実行されるように、レジストリに設定する必要がある構成を変更パッケージに含めることができます。 つまり、メイン アプリケーションでは、プラグインが存在するかどうかを確認するためにレジストリが活用されます。 メイン パッケージと修正パッケージを展開すると、アプリケーションは、実行時にメイン パッケージと修正パッケージの両方の仮想レジストリ (VREG) を認識します。

メイン パッケージは VREG を使用して次のことを行っている可能性があることに注意してください。

  • プラグインのファイル (DLL) を読み込む場所を表示する。 この場合、ファイルがパッケージの一部であることを確認します。 これにより、メイン パッケージは実行時にファイルにアクセスできます。
  • VREG キーの値を確認する場所を認識する。 メイン パッケージは VREG に存在する値を探しているかもしれません。 修正パッケージを手動で作成するか、ツールを使用して作成するときは、値が正しいことを確認します。

Windows 10、バージョン 1903 以降の変更パッケージ

Windows 10 Version 1903 では、次の機能が追加されました。

マニフェストの更新

MSIX 修正パッケージのマニフェストに次の要素のサポートが追加されました。

<Properties>
   <rescap6:ModificationPackage>true</rescap6:ModificationPackage>
</Properties>

修正パッケージがバージョン 1903 以降で動作するようにするには、修正パッケージのマニフェストにこの要素を含める必要があります。 MSIX Packaging Tool の 1 月リリースを使用して MSIX 修正パッケージをパッケージ化した場合、この操作は自動的に行われます。 このリリース前に Microsoft のツールを使用してパッケージを変換している場合は、Microsoft のツールで既存のパッケージを編集してこの新しい要素を追加できます。 さらに、ユーザーが修正パッケージをインストールすると、そのパッケージによってメイン アプリケーションが変更される可能性があることを示すアラートが出力されます。

バージョン 1903 より前に作成された変更パッケージを使用している場合は、パッケージ マニフェストを編集して MaxVersionTested 属性を 10.0.18362.0 に更新する必要があります。

<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17701.0" MaxVersionTested="10.0.18362.0" />

MSIX Packaging Tool を使用して修正パッケージを作成する

MSIX Packaging Tool を使用して修正パッケージを作成できます。

  • メイン パッケージを指定します。 変換操作を行っているマシンでメイン パッケージの MSIX バージョンが利用可能であることを確認します。 そうでない場合は、発行元とメイン アプリケーションの情報を手動で入力する必要があります。 また、一部のカスタマイズでは、メイン アプリケーションがマシンにインストールされている必要があります。 Modification Package MPT

  • 変換が完了したら、パッケージ エディターを使用してパッケージを変更します。 修正パッケージの VREG に特定の値が設定されていることがメイン パッケージから求められる場合があります。 その場合は、パッケージを適切に編集します。

MakeAppx.exe を使用して修正パッケージを作成する

Windows 10 SDK に含まれている MakeAppX.exe ツールを使用して、変更パッケージを手動で作成できます。

  • マニフェスト内で、メイン パッケージを指定します。 発行元とメイン パッケージ名を含めます。

    <Dependencies>
      <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17701.0" MaxVersionTested="12.0.0.0"/>
      <uap4:MainPackageDependency Name="HeadTrax" Publisher="CN=Contoso Software, O=Contoso Corporation, C=US" />
    </Dependencies>
    
  • Registry.dat、User.dat、および Userclass.dat を作成して、修正パッケージを読み込むために必要なレジストリ キーをすべて作成します。 これは、メイン アプリケーションでカスタム レジストリ キーを認識する必要がある場合にのみ必要です。 すべてがコンテナー内で実行されているため、実行時にメイン パッケージと修正パッケージの仮想レジストリが統合され、メイン パッケージが修正パッケージの仮想レジストリを認識できるようになります。

このプロセスでは、メイン アプリケーションの実行可能ファイルが仮想ファイル システム (VFS) にない限り、ファイル システムのプラグインとカスタマイズもサポートされます。 これは、メイン パッケージがメイン パッケージと修正パッケージのすべての VFS を取得できるようにするためです。

コンピューターへの変更パッケージのインストール

コンピューターに変更パッケージをインストールする場合は、他のインストール規則に従ってください。 なお、パッケージのインストール時に -OptionalPackagePath パラメーターを使用することをお勧めします。

競合の解決

複数の変更パッケージが同じ値を変更しようとすると、変更パッケージの名前の アルファベット順 を考慮して競合が解決されます。