ホステッド アプリの作成Create hosted apps

Windows 10 バージョン2004以降では、ホストされている アプリを作成できます。Starting in Windows 10, version 2004, you can create hosted apps. ホストされているアプリは、親 ホスト アプリと同じ実行可能ファイルと定義を共有しますが、システム上の別のアプリのように見え、動作します。A hosted app shares the same executable and definition as a parent host app, but it looks and behaves like a separate app on the system.

ホステッド アプリは、コンポーネント (実行可能ファイルやスクリプト ファイルなど) がスタンドアロンの Windows 10 アプリのように動作する必要があるものの、そのコンポーネントを実行するためにホスト プロセスが必要な場合に役立ちます。Hosted apps are useful for scenarios where you want a component (such as an executable file or a script file) to behave like a standalone Windows 10 app, but the component requires a host process in order to execute. たとえば、PowerShell スクリプトや Python スクリプトを、実行するためにホストをインストールする必要があるホスト型アプリとして配信することができます。For example, a PowerShell or Python script could be delivered as a hosted app that requires a host to be installed in order to run. ホステッド アプリには、独自のスタート タイルや ID を指定できるほか、バックグラウンド タスク、通知、タイル、共有ターゲットなどの Windows 10 の機能と緊密に統合することもできます。A hosted app can have its own start tile, identity, and deep integration with Windows 10 features such as background tasks, notifications, tiles, and share targets.

ホステッドアプリの機能は、パッケージマニフェスト内のいくつかの要素と属性によってサポートされています。これにより、ホストされているアプリでホストアプリケーションパッケージの実行可能ファイルと定義を使用できるようになります。The hosted apps feature is supported by several elements and attributes in the package manifest that enable a hosted app to use an executable and definition in a host app package. ユーザーがホストされているアプリを実行すると、ホストされているアプリの id でホストの実行可能ファイルが OS によって自動的に起動されます。When a user runs the hosted app, the OS automatically launches the host executable under the identity of the hosted app. ホストは、ビジュアルアセット、コンテンツ、または呼び出し Api をホストされたアプリとして読み込むことができます。The host can then load visual assets, content, or call APIs as the hosted app. ホストされているアプリは、ホストとホストされるアプリの間で宣言された機能の積集合を取得します。The hosted app gets the intersection of capabilities declared between the host and hosted app. つまり、ホストされているアプリは、ホストが提供するよりも多くの機能を要求することはできません。This means that a hosted app cannot ask for more capabilities than what the host provides.

ホストを定義するDefine a host

ホストは、ホストされているアプリのメインの実行可能ファイルまたはランタイムプロセスです。The host is the main executable or runtime process for the hosted app. 現時点でサポートされているホストは、 パッケージ idを持つデスクトップアプリ (.net または C++/Win32) のみです。Currently, the only supported hosts are desktop apps (.NET or C++/Win32) that have package identity. 現時点では、UWP アプリはホストとしてはサポートされていません。UWP apps are not supported as hosts at this time. デスクトップアプリでパッケージ id を使用するには、いくつかの方法があります。There are several ways for a desktop app to have package identity:

  • パッケージ id をデスクトップアプリに付与する最も一般的な方法は、パッケージを MSIX パッケージにパッケージ化することです。The most common way to grant package identity to a desktop app is by packaging it in an MSIX package.
  • 場合によっては、 スパースパッケージを作成してパッケージ id を許可することもできます。In some cases, you may alternatively choose to grant package identity by creating a sparse package. このオプションは、デスクトップアプリを展開するために MSIX パッケージを導入できない場合に便利です。This option is useful if you are unable to adopt MSIX packaging for deploying your desktop app.

ホストは、パッケージマニフェスト内で uap10: HostRuntime 拡張機能によって宣言されます。The host is declared in its package manifest by the uap10:HostRuntime extension. この拡張機能には、ホストされているアプリのパッケージマニフェストによっても参照される値を割り当てる必要がある Id 属性があります。This extension has an Id attribute that must be assigned a value that is also referenced by the package manifest for the hosted app. ホストされているアプリがアクティブになると、ホストされているアプリの id でホストが起動し、ホストされているアプリケーションパッケージからコンテンツまたはバイナリを読み込むことができます。When the hosted app is activated, the host is launched under the identity of the hosted app and can load content or binaries from the hosted app package.

次の例は、パッケージマニフェストでホストを定義する方法を示しています。The following example demonstrates how to define a host in a package manifest. Uap10: HostRuntime拡張機能はパッケージ全体であるため、 package要素の子として宣言されます。The uap10:HostRuntime extension is package-wide and is therefore declared as a child of the Package element.

<Package xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10">

  <Extensions>
    <uap10:Extension Category="windows.hostRuntime"  
        Executable="PyScriptEngine\PyScriptEngine.exe"  
        uap10:RuntimeBehavior="packagedClassicApp"  
        uap10:TrustLevel="mediumIL">
      <uap10:HostRuntime Id="PythonHost" />
    </uap10:Extension>
  </Extensions>

</Package>

次の要素について、これらの重要な詳細をメモしておきます。Make note of these important details about the following elements.

要素Element 詳細Details
uap10:Extensionuap10:Extension カテゴリは、ホストされている windows.hostRuntime アプリをアクティブ化するときに使用されるランタイム情報を定義する、パッケージ全体の拡張機能を宣言します。The windows.hostRuntime category declares a package-wide extension that defines the runtime information to be used when activating a hosted app. ホストされるアプリは、拡張機能で宣言された定義を使用して実行されます。A hosted app will run with the definitions declared in the extension. 前の例で宣言したホストアプリを使用する場合、ホストされるアプリは実行可能 PyScriptEngine.exe ファイルとして mediumIL 信頼レベルで実行されます。When using the host app declared in the previous example, a hosted app will run as the executable PyScriptEngine.exe at the mediumIL trust level.

ExecutableUap10: runtimebehavior、およびuap10: TrustLevel属性は、パッケージ内のホストプロセスバイナリの名前と、ホストされているアプリの実行方法を指定します。The Executable, uap10:RuntimeBehavior, and uap10:TrustLevel attributes specify the name of the host process binary in the package and how the hosted apps will run. たとえば、前の例の属性を使用してホストされているアプリは、mediumIL 信頼レベルで実行可能 PyScriptEngine.exe として実行されます。For example, a hosted app using the attributes in the previous example will run as the executable PyScriptEngine.exe at mediumIL trust level.
uap10:HostRuntimeuap10:HostRuntime Id属性は、パッケージ内のこの特定のホストアプリの一意の識別子を宣言します。The Id attribute declares the unique identifier of this specific host app in the package. パッケージには複数のホストアプリを含めることができ、それぞれに一意のIdを持つUap10: hostruntime要素が必要です。A package can have multiple host apps, and each must have a uap10:HostRuntime element with a unique Id.

ホストされているアプリを宣言するDeclare a hosted app

ホストされている アプリ は、 ホストに対するパッケージの依存関係を宣言します。A hosted app declares a package dependency on a host. ホストされているアプリは、独自のパッケージでエントリポイント実行可能ファイルを指定する代わりに、ホストの ID (つまり、ホストパッケージのuap10: HostRuntime拡張機能のid属性) を使用してアクティブ化します。The hosted app leverages the host's ID (that is, the Id attribute of the uap10:HostRuntime extension in the host package) for activation instead of specifying an entry point executable in its own package. ホストされるアプリには、通常、ホストからアクセスできるコンテンツ、ビジュアルアセット、スクリプト、またはバイナリが含まれています。The hosted app typically contains content, visual assets, scripts, or binaries that may be accessed by the host. ホストされるアプリケーションパッケージの TargetDeviceFamily 値は、ホストと同じ値をターゲットにする必要があります。The TargetDeviceFamily value in the hosted app package should target the same value as the host.

ホストされているアプリケーションパッケージは、署名または署名なしにすることができます。Hosted app packages can be signed or unsigned:

  • 署名付きパッケージには実行可能ファイルが含まれる場合があります。Signed packages may contain executable files. これは、バイナリ拡張機構を持つシナリオで役立ちます。これにより、ホストは、ホストされているアプリケーションパッケージに DLL または登録されたコンポーネントを読み込むことができます。This is useful in scenarios that have a binary extension mechanism, which enables the host to load a DLL or registered component in the hosted app package.
  • 署名されていないパッケージには、実行可能でないファイルのみを含めることができます。Unsigned packages can only contain non-executable files. これは、ホストがイメージ、アセット、およびコンテンツまたはスクリプトファイルの読み込みのみを行う必要がある場合に便利です。This is useful in scenarios where the host only needs to load images, assets and content or script files. 署名されて OID いないパッケージは、 id 要素に特別な値を含める必要があります。そうでないと、登録できません。Unsigned packages must include a special OID value in their Identity element or they won’t be allowed to register. これにより、署名されたパッケージの id との競合や、署名されていないパッケージのスプーフィングを防ぐことができます。This prevents unsigned packages from conflicting with or spoofing the identity of a signed package.

ホストされるアプリを定義するには、パッケージマニフェストで次の項目を宣言します。To define a hosted app, declare the following items in the package manifest:

次の例は、署名されていないホスト型アプリのパッケージマニフェストの関連セクションを示しています。The following example demonstrates the relevant sections of a package manifest for an unsigned hosted app.

<Package xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10">

  <Identity Name="NumberGuesserManifest"
    Publisher="CN=AppModelSamples, OID.2.25.311729368913984317654407730594956997722=1"
    Version="1.0.0.0" />

  <Dependencies>
    <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.19041.0" MaxVersionTested="10.0.19041.0" />
    <uap10:HostRuntimeDependency Name="PyScriptEnginePackage" Publisher="CN=AppModelSamples" MinVersion="1.0.0.0"/>
  </Dependencies>

  <Applications>
    <Application Id="NumberGuesserApp"  
      uap10:HostId="PythonHost"  
      uap10:Parameters="-Script &quot;NumberGuesser.py&quot;">
    </Application>
  </Applications>

</Package>

次の要素について、これらの重要な詳細をメモしておきます。Make note of these important details about the following elements.

要素Element 詳細Details
IdentityIdentity この例のホステッドアプリパッケージは署名されていないため、 Publisher 属性には文字列を含める必要があり OID.2.25.311729368913984317654407730594956997722=1 ます。Because the hosted app package in this example is unsigned, the Publisher attribute must include the OID.2.25.311729368913984317654407730594956997722=1 string. これにより、署名されていないパッケージが署名付きパッケージの id を偽装できないようにします。This ensures that the unsigned package cannot spoof the identity of a signed package.
TargetDeviceFamilyTargetDeviceFamily MinVersion属性では、10.0.19041.0 またはそれ以降のバージョンの OS を指定する必要があります。The MinVersion attribute must specify 10.0.19041.0 or a later OS version.
uap10:HostRuntimeDependencyuap10:HostRuntimeDependency この要素要素は、ホストアプリケーションパッケージに対する依存関係を宣言します。This element element declares a dependency on the host app package. これは、ホストパッケージの 名前発行元 と、それが依存している MinVersion で構成されます。This consists of the Name and Publisher of the host package, and the MinVersion it depends on. これらの値は、ホストパッケージの Identity 要素の下にあります。These values can be found under the Identity element in the host package.
ApplicationApplication Uap10: HostId属性は、ホストの依存関係を表します。The uap10:HostId attribute expresses the dependency on the host. ホストされたアプリケーションパッケージは、アプリケーションまたは拡張要素の通常の実行可能ファイルEntryPoint属性ではなく、この属性を宣言する必要があります。The hosted app package must declare this attribute instead of the usual Executable and EntryPoint attributes for an Application or Extension element. その結果、ホストされているアプリは、対応するHostId値を使用して、ホストから実行可能ファイルエントリポイント、およびランタイム属性を継承します。As a result, the hosted app inherits the Executable, EntryPoint and runtime attributes from the host with the corresponding HostId value.

Uap10: parameters属性は、ホスト実行可能ファイルのエントリポイント関数に渡されるパラメーターを指定します。The uap10:Parameters attribute specifies parameters that are passed to the entry point function of the host executable. ホストは、これらのパラメーターの処理方法を認識する必要があるため、ホストとホストされているアプリの間に暗黙のコントラクトがあります。Because the host needs to know what to do with these parameters, there is an implied contract between the host and hosted app.

実行時に署名されていないホストされたアプリケーションパッケージを登録するRegister an unsigned hosted app package at run time

Uap10: HostRuntime拡張機能の利点の1つは、ホストが実行時にホストされているアプリケーションパッケージを動的に生成し、署名しなくても、パッケージ化されたアプリケーションパッケージを実行時に登録できるようにすることです。One benefit of the uap10:HostRuntime extension is that it enables a host to dynamically generate a hosted app package at runtime and register it by using the PackageManager API, without needing to sign it. これにより、ホストはホストされているアプリケーションパッケージのコンテンツとマニフェストを動的に生成し、登録することができます。This enables a host to dynamically generate the content and manifest for the hosted app package and then register it.

次のよう に、パッケージ 化されていないホストされたアプリケーションパッケージを登録するには、使用します。Use the following methods of the PackageManager class to register an unsigned hosted app package. これらのメソッドは、Windows 10 バージョン2004以降で使用できます。These methods are available starting in Windows 10, version 2004.

  • AddPackageByUriAsync: Optionsパラメーターのallowunsignedプロパティを使用して、署名されていない msix パッケージを登録します。AddPackageByUriAsync: Registers an unsigned MSIX package by using the AllowUnsigned property of the options parameter.
  • RegisterPackageByUriAsync: パッケージマニフェストファイルの厳密な登録を実行します。RegisterPackageByUriAsync: Performs a loose package manifest file registration. パッケージが署名されている場合、マニフェストを含むフォルダーには、 ますファイル とカタログが含まれている必要があります。If the package is signed, the folder containing the manifest must include a .p7x file and catalog. Unsigned の場合は、 optionsパラメーターのallowunsignedプロパティを設定する必要があります。If unsigned, the AllowUnsigned property of the options parameter must be set.

署名されていないホスト型アプリの要件Requirements for unsigned hosted apps

  • パッケージマニフェストの アプリケーション 要素または 拡張 要素に、 実行可能ファイルEntryPoint属性、 TrustLevel 属性などのアクティベーションデータを含めることはできません。The Application or Extension elements in the package manifest cannot contain activation data such as the Executable, EntryPoint, or TrustLevel attributes. 代わりに、これらの要素には、ホストとuap10: Parameters属性の依存関係を表すuap10: HostId属性のみを含めることができます。Instead, these elements can only contain a uap10:HostId attribute that expresses the dependency on the host and a uap10:Parameters attribute.
  • パッケージはメインパッケージである必要があります。The package must be a main package. バンドル、フレームワークパッケージ、リソース、またはオプションのパッケージを指定することはできません。It cannot be a bundle, framework package, resource, or optional package.

署名されていないホストされたアプリケーションパッケージをインストールして登録するホストの要件Requirements for a host that installs and registers an unsigned hosted app package

サンプルSample

ホストとして自身を宣言し、実行時にホストされるアプリケーションパッケージを動的に登録する完全に機能するサンプルアプリについては、「 ホステッドアプリのサンプル」を参照してください。For a fully functional sample app that declares itself as a host and then dynamically registers a hosted app package at runtime, see the hosted app sample.

ホストThe host

ホストには PyScriptEngineという名前が付けられます。The host is named PyScriptEngine. これは、python スクリプトを実行する C# で記述されたラッパーです。This is a wrapper written in C# that runs python scripts. パラメーターを指定して実行すると -Register 、スクリプトエンジンによって、python スクリプトを含むホストされるアプリがインストールされます。When run with the -Register parameter, the script engine installs a hosted app containing a python script. 新しくインストールされたホステッドアプリをユーザーが起動しようとすると、ホストが起動され、 NumberGuesser python スクリプトが実行されます。When a user tries to launch the newly installed hosted app, the host is launched and executes the NumberGuesser python script.

ホストアプリのパッケージマニフェスト (PyScriptEnginePackage フォルダー内の package.appxmanifest ファイル) には、アプリを ID Python ホストおよび実行可能ファイルPyScriptEngine.exeを持つホストとして宣言するuap10: hostruntime拡張機能が含まれています。The package manifest for the host app (the Package.appxmanifest file in the PyScriptEnginePackage folder) contains a uap10:HostRuntime extension that declares the app as a host with the ID PythonHost and the executable PyScriptEngine.exe.

注意

このサンプルでは、パッケージマニフェストは package.appxmanifest という名前で、 Windows アプリケーションパッケージプロジェクトの一部です。In this sample, the package manifest is named Package.appxmanifest and it is part of a Windows Application Packaging Project. このプロジェクトをビルドすると、 AppxManifest.xmlという名前のマニフェストが生成 され、ホストアプリの msix パッケージがビルドされます。When this project is built, it generates a manifest named AppxManifest.xml and builds the MSIX package for the host app.

ホストされているアプリThe hosted app

ホストされているアプリは、python スクリプトとパッケージマニフェストなどのパッケージアーティファクトで構成されます。The hosted app consists of a python script and package artifacts such as the package manifest. PE ファイルは含まれていません。It doesn’t contain any PE files.

ホストされるアプリ (NumberGuesser/AppxManifest.xml ファイル) のパッケージマニフェストには、次の項目が含まれています。The package manifest for the hosted app (the NumberGuesser/AppxManifest.xml file) contains the following items:

  • Identity要素のPublisher属性には、署名されていない OID.2.25.311729368913984317654407730594956997722=1 パッケージに必要な識別子が含まれています。The Publisher attribute of the Identity element contains the OID.2.25.311729368913984317654407730594956997722=1 identifer, which is required for an unsigned package.
  • Application要素のuap10: HostId属性は、そのホストとしてpython ホストを識別します。The uap10:HostId attribute of the Application element identifies PythonHost as its host.

サンプルを実行するRun the sample

このサンプルでは、バージョン10.0.19041.0 以降の Windows 10 と Windows SDK が必要です。The sample requires version 10.0.19041.0 or later of Windows 10 and the Windows SDK.

  1. 開発用コンピューターのフォルダーに サンプル をダウンロードします。Download the sample to a folder on your development computer.

  2. Visual Studio で PyScriptEngine ソリューションを開き、 PyScriptEnginePackage プロジェクトをスタートアッププロジェクトとして設定します。Open the PyScriptEngine.sln solution in Visual Studio and set the PyScriptEnginePackage project as the startup project.

  3. PyScriptEnginePackageプロジェクトをビルドします。Build the PyScriptEnginePackage project.

  4. ソリューションエクスプローラーで、 PyScriptEnginePackage プロジェクトを右クリックし、[ 配置] を選択します。In Solution Explorer, right-click the PyScriptEnginePackage project and choose Deploy.

  5. サンプルファイルをコピーしたディレクトリにコマンドプロンプトウィンドウを開き、次のコマンドを実行してサンプル NumberGuesser アプリ (ホステッドアプリ) を登録します。Open a Command Prompt window to the directory where you copied the sample files and run the following command to register the sample NumberGuesser app (the hosted app). D:\repos\HostedAppsサンプルファイルをコピーしたパスに変更します。Change D:\repos\HostedApps to the path where you copied the sample files.

    D:\repos\HostedApps>pyscriptengine -Register D:\repos\HostedApps\NumberGuesser\AppxManifest.xml
    

    注意

    pyscriptengineサンプル内のホストでAppexecutionaliasが宣言されているため、コマンドラインでを実行できます。You can run pyscriptengine on the command line because the host in the sample declares an AppExecutionAlias.

  6. [ スタート ] メニューを開き、[ NumberGuesser ] をクリックして、ホストされているアプリを実行します。Open the Start menu and click NumberGuesser to run the hosted app.