Erstellen gehosteter AppsCreate hosted apps

Ab Windows 10, Version 2004, können Sie gehostete Appserstellen.Starting in Windows 10, version 2004, you can create hosted apps. Eine gehostete App nutzt dieselbe ausführbare Datei und Definition wie eine übergeordnete Host -APP, sieht aber wie eine separate App auf dem System aus.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.

Gehostete Apps sind nützlich für Szenarios, in denen sich eine Komponente (z. B. eine ausführbare Datei oder eine Skriptdatei) wie eine eigenständige Windows 10-App verhalten soll. Die Komponente erfordert jedoch einen Hostprozess, um ausgeführt werden zu können.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. Beispielsweise könnte ein PowerShell-oder Python-Skript als gehostete App übermittelt werden, für die ein Host installiert werden muss, um ausgeführt werden zu können.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. Eine gehostete App kann über eine eigene Startkachel, eine eigene Identität und eine umfassende Integration in Windows 10-Features verfügen, z. B. Hintergrundaufgaben, Benachrichtigungen, Kacheln und Freigabeziele.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.

Die Funktion "gehostete Apps" wird von mehreren Elementen und Attributen im Paket Manifest unterstützt, die einer gehosteten App ermöglichen, eine ausführbare Datei und eine Definition in einem Host-App-Paket zu verwenden.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. Wenn ein Benutzer die gehostete App ausführt, wird die ausführbare Datei des Hosts automatisch von dem Betriebssystem unter der Identität der gehosteten App gestartet.When a user runs the hosted app, the OS automatically launches the host executable under the identity of the hosted app. Der Host kann dann visuelle Assets, Inhalte oder Aufrufe von APIs als gehostete App laden.The host can then load visual assets, content, or call APIs as the hosted app. Die gehostete APP erhält die Schnittmenge der Funktionen, die zwischen dem Host und der gehosteten App deklariert werden.The hosted app gets the intersection of capabilities declared between the host and hosted app. Dies bedeutet, dass eine gehostete APP nicht mehr Funktionen anfordern kann, als Sie vom Host bereitstellt wird.This means that a hosted app cannot ask for more capabilities than what the host provides.

Definieren eines HostsDefine a host

Der Host ist die hauptausführ Bare Datei oder der Lauf Zeit Prozess für die gehostete app.The host is the main executable or runtime process for the hosted app. Zurzeit sind die einzigen unterstützten Hosts Desktop-Apps (.net oder C++/Win32), die über die Paket Identitätverfügen.Currently, the only supported hosts are desktop apps (.NET or C++/Win32) that have package identity. UWP-apps werden zurzeit nicht als Hosts unterstützt.UWP apps are not supported as hosts at this time. Für eine Desktop-App gibt es mehrere Möglichkeiten, die Paket Identität zu haben:There are several ways for a desktop app to have package identity:

  • Die gängigste Methode zum gewähren einer Paket Identität an eine Desktop-App besteht darin, Sie in einem msix-Paket zu verpacken.The most common way to grant package identity to a desktop app is by packaging it in an MSIX package.
  • In einigen Fällen können Sie alternativ die Paket Identität durch Erstellen eines sparsepaketserteilen.In some cases, you may alternatively choose to grant package identity by creating a sparse package. Diese Option ist nützlich, wenn Sie keine msix-Paket Erstellung für die Bereitstellung Ihrer Desktop-App durchführen können.This option is useful if you are unable to adopt MSIX packaging for deploying your desktop app.

Der Host wird von der uap10: hostrauuntime -Erweiterung im Paket Manifest deklariert.The host is declared in its package manifest by the uap10:HostRuntime extension. Diese Erweiterung verfügt über ein ID -Attribut, dem ein Wert zugewiesen werden muss, auf den auch vom Paket Manifest für die gehostete App verwiesen wird.This extension has an Id attribute that must be assigned a value that is also referenced by the package manifest for the hosted app. Wenn die gehostete App aktiviert ist, wird der Host unter der Identität der gehosteten App gestartet und kann Inhalte oder Binärdateien aus dem gehosteten App-Paket laden.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.

Im folgenden Beispiel wird veranschaulicht, wie Sie einen Host in einem Paket Manifest definieren.The following example demonstrates how to define a host in a package manifest. Die " uap10: "-Erweiterung ist Paket weit und wird daher als untergeordnetes Element des Package -Elements deklariert.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>

Notieren Sie sich diese wichtigen Details zu den folgenden Elementen.Make note of these important details about the following elements.

ElementElement DetailsDetails
uap10:Extensionuap10:Extension Die windows.hostRuntime Kategorie deklariert eine Paket weite Erweiterung zum Definieren der Laufzeitinformationen, die beim Aktivieren einer gehosteten App verwendet werden sollen.The windows.hostRuntime category declares a package-wide extension that defines the runtime information to be used when activating a hosted app. Eine gehostete APP wird mit den in der Erweiterung deklarierten Definitionen ausgeführt.A hosted app will run with the definitions declared in the extension. Wenn Sie die im vorherigen Beispiel deklarierte Host-App verwenden, wird eine gehostete App als ausführbare Datei PyScriptEngine.exe auf der mediumil -Vertrauens Ebene ausgeführt.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.

Die Attribute " ausführbare", " uap10: runtimebehavior" und " uap10: TrustLevel " geben den Namen der Binärdatei des Host Prozesses im Paket an und wie die gehosteten apps ausgeführt werden.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. Beispielsweise wird eine gehostete APP, die die Attribute im vorherigen Beispiel verwendet, als ausführbare Datei PyScriptEngine.exe auf der mediumil-Vertrauens Ebene ausgeführt.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 Das ID -Attribut deklariert den eindeutigen Bezeichner dieser bestimmten Host-App im Paket.The Id attribute declares the unique identifier of this specific host app in the package. Ein Paket kann über mehrere Host-apps verfügen, und jedes muss über ein uap10: hostrauuntime -Element mit einer eindeutigen IDverfügen.A package can have multiple host apps, and each must have a uap10:HostRuntime element with a unique Id.

Deklarieren einer gehosteten AppDeclare a hosted app

Eine gehostete App deklariert eine Paketabhängigkeit auf einem Host.A hosted app declares a package dependency on a host. Die gehostete App nutzt die Host-ID (d. h. das ID -Attribut der uap10: hostrauuntime -Erweiterung im Host Paket) zur Aktivierung, anstatt eine ausführbare Einstiegspunkt Datei im eigenen Paket anzugeben.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. Die gehostete app enthält in der Regel Inhalte, visuelle Objekte, Skripts oder Binärdateien, auf die der Host zugreifen kann.The hosted app typically contains content, visual assets, scripts, or binaries that may be accessed by the host. Der targetdevicefamily -Wert im gehosteten App-Paket sollte auf denselben Wert wie der Host abzielen.The TargetDeviceFamily value in the hosted app package should target the same value as the host.

Gehostete App-Pakete können signiert oder nicht signiert werden:Hosted app packages can be signed or unsigned:

  • Signierte Pakete können ausführbare Dateien enthalten.Signed packages may contain executable files. Dies ist nützlich in Szenarien mit einem binären Erweiterungsmechanismus, der es dem Host ermöglicht, eine DLL oder eine registrierte Komponente in das gehostete App-Paket zu laden.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.
  • Nicht signierte Pakete können nur nicht ausführbare Dateien enthalten.Unsigned packages can only contain non-executable files. Dies ist in Szenarien nützlich, in denen der Host nur Bilder, Ressourcen und Inhalte oder Skriptdateien laden muss.This is useful in scenarios where the host only needs to load images, assets and content or script files. Nicht signierte Pakete müssen einen speziellen OID Wert in Ihrem Identity -Element enthalten, oder Sie dürfen nicht registriert werden.Unsigned packages must include a special OID value in their Identity element or they won’t be allowed to register. Dadurch wird verhindert, dass nicht signierte Pakete mit der Identität eines signierten Pakets in Konflikt stehen oder Sie Spoofing.This prevents unsigned packages from conflicting with or spoofing the identity of a signed package.

Um eine gehostete APP zu definieren, deklarieren Sie die folgenden Elemente im Paket Manifest:To define a hosted app, declare the following items in the package manifest:

Im folgenden Beispiel werden die relevanten Abschnitte eines Paket Manifests für eine nicht signierte gehostete App veranschaulicht.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>

Notieren Sie sich diese wichtigen Details zu den folgenden Elementen.Make note of these important details about the following elements.

ElementElement DetailsDetails
IdentityIdentity Da das in diesem Beispiel gehostete App-Paket nicht signiert ist, muss das Publisher -Attribut die OID.2.25.311729368913984317654407730594956997722=1 Zeichenfolge enthalten.Because the hosted app package in this example is unsigned, the Publisher attribute must include the OID.2.25.311729368913984317654407730594956997722=1 string. Dadurch wird sichergestellt, dass das nicht signierte Paket die Identität eines signierten Pakets nicht verspo, kann.This ensures that the unsigned package cannot spoof the identity of a signed package.
TargetDeviceFamilyTargetDeviceFamily Das MinVersion -Attribut muss 10.0.19041.0 oder eine spätere Betriebssystemversion angeben.The MinVersion attribute must specify 10.0.19041.0 or a later OS version.
uap10:HostRuntimeDependencyuap10:HostRuntimeDependency Dieses Element deklariert eine Abhängigkeit vom Host-App-Paket.This element element declares a dependency on the host app package. Dies besteht aus dem Namen und dem Verleger des Host Pakets und der MinVersion , von der es abhängt.This consists of the Name and Publisher of the host package, and the MinVersion it depends on. Diese Werte finden Sie unter dem Identity -Element im Host Paket.These values can be found under the Identity element in the host package.
AnwendungApplication Das uap10: hostid- Attribut drückt die Abhängigkeit auf dem Host aus.The uap10:HostId attribute expresses the dependency on the host. Das gehostete App-Paket muss dieses Attribut anstelle der üblichen ausführbaren Attribute und entryPoint -Attribute für ein Anwendungs -oder Erweiterungs Element deklarieren.The hosted app package must declare this attribute instead of the usual Executable and EntryPoint attributes for an Application or Extension element. Folglich erbt die gehostete APP die Attribute für ausführbare, entryPoint und Runtime vom Host mit dem entsprechenden HostID- Wert.As a result, the hosted app inherits the Executable, EntryPoint and runtime attributes from the host with the corresponding HostId value.

Das Attribut uap10: Parameters gibt Parameter an, die an die Einstiegspunkt Funktion der ausführbaren Datei des Hosts übermittelt werden.The uap10:Parameters attribute specifies parameters that are passed to the entry point function of the host executable. Da der Host wissen muss, was mit diesen Parametern zu tun ist, gibt es einen impliziten Vertrag zwischen dem Host und der gehosteten app.Because the host needs to know what to do with these parameters, there is an implied contract between the host and hosted app.

Registrieren eines nicht signierten gehosteten App-Pakets zur LaufzeitRegister an unsigned hosted app package at run time

Ein Vorteil der uap10: hostrauuntime -Erweiterung besteht darin, dass ein Host ein gehostetes App-Paket zur Laufzeit dynamisch generieren und mithilfe der packagemanager -API registrieren kann, ohne es signieren zu müssen.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. Auf diese Weise kann ein Host den Inhalt und das Manifest für das gehostete App-Paket dynamisch generieren und dann registrieren.This enables a host to dynamically generate the content and manifest for the hosted app package and then register it.

Verwenden Sie die folgenden Methoden der packagemanager -Klasse, um ein nicht signiertes gehostete App-Paket zu registrieren.Use the following methods of the PackageManager class to register an unsigned hosted app package. Diese Methoden sind ab Windows 10, Version 2004, verfügbar.These methods are available starting in Windows 10, version 2004.

  • Addpackagebyuriasync: registriert ein nicht signiertes msix-Paket, indem die Eigenschaft " Zuteilungen " des Parameters " options " verwendet wird.AddPackageByUriAsync: Registers an unsigned MSIX package by using the AllowUnsigned property of the options parameter.
  • Registerpackagebyuriasync: führt eine lose Paket Manifest-Datei Registrierung aus.RegisterPackageByUriAsync: Performs a loose package manifest file registration. Wenn das Paket signiert ist, muss der Ordner, der das Manifest enthält, eine . P7X "-Datei und einen-Katalog enthalten.If the package is signed, the folder containing the manifest must include a .p7x file and catalog. Wenn Sie nicht signiert ist, muss die Eigenschaft " zugwunsigned " des options -Parameters festgelegt werden.If unsigned, the AllowUnsigned property of the options parameter must be set.

Anforderungen für nicht signierte gehostete AppsRequirements for unsigned hosted apps

  • Die Anwendungs -oder Erweiterungs Elemente im Paket Manifest dürfen keine Aktivierungsdaten enthalten, wie z. b . die Attribute"exe", " entryPoint" oder " TrustLevel "The Application or Extension elements in the package manifest cannot contain activation data such as the Executable, EntryPoint, or TrustLevel attributes. Stattdessen können diese Elemente nur ein uap10: hostid- Attribut enthalten, das die Abhängigkeit des Hosts und eines uap10: Parameters -Attributs ausdrückt.Instead, these elements can only contain a uap10:HostId attribute that expresses the dependency on the host and a uap10:Parameters attribute.
  • Das Paket muss ein Hauptpaket sein.The package must be a main package. Es darf sich nicht um ein Bündel, ein frameworkpaket, eine Ressource oder ein optionales Paket handeln.It cannot be a bundle, framework package, resource, or optional package.

Anforderungen für einen Host, von dem ein nicht signiertes gehostete App-Paket installiert und registriert wirdRequirements for a host that installs and registers an unsigned hosted app package

BeispielSample

Eine voll funktionsfähige Beispiel-APP, die sich selbst als Host deklariert und dann ein gehostetes App-Paket zur Laufzeit dynamisch registriert, finden Sie unter Beispiel für gehostete Apps.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.

HostThe host

Der Host hat den Namen pyscriptengine.The host is named PyScriptEngine. Dabei handelt es sich um einen in c# geschriebenen Wrapper, der python-Skripts ausführt.This is a wrapper written in C# that runs python scripts. Wenn Sie mit dem- -Register Parameter ausführen, wird von der Skript-Engine eine gehostete App mit einem Python-Skript installiert.When run with the -Register parameter, the script engine installs a hosted app containing a python script. Wenn ein Benutzer versucht, die neu installierte gehostete APP zu starten, wird der Host gestartet, und das Python-Skript " Zahlungszeit " wird ausgeführt.When a user tries to launch the newly installed hosted app, the host is launched and executes the NumberGuesser python script.

Das Paket Manifest für die Host-app (die Datei "Package. appxmanifest" im Ordner "pyscriptenginepackage") enthält eine uap10: hostrauuntime -Erweiterung, die die APP als Host mit der ID " pythonhost " und der ausführbaren PyScriptEngine.exedeklariert.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.

Hinweis

In diesem Beispiel heißt das Paket Manifest "Package. appxmanifest" und ist Teil eines Windows- anwendungspaketprojekts.In this sample, the package manifest is named Package.appxmanifest and it is part of a Windows Application Packaging Project. Wenn dieses Projekt erstellt wird, generiert es ein Manifest mit dem Namen AppxManifest.xml und erstellt das msix-Paket für die Host-app.When this project is built, it generates a manifest named AppxManifest.xml and builds the MSIX package for the host app.

Die gehostete AppThe hosted app

Die gehostete App besteht aus einem Python-Skript und Paket Artefakten, wie z. b. dem Paket Manifest.The hosted app consists of a python script and package artifacts such as the package manifest. Sie enthält keine PE-Dateien.It doesn’t contain any PE files.

Das Paket Manifest für die gehostete app (die Datei "zahlername/AppxManifest.xml") enthält die folgenden Elemente:The package manifest for the hosted app (the NumberGuesser/AppxManifest.xml file) contains the following items:

  • Das Publisher -Attribut des Identity -Elements enthält den OID.2.25.311729368913984317654407730594956997722=1 identierer, der für ein nicht signiertes Paket erforderlich ist.The Publisher attribute of the Identity element contains the OID.2.25.311729368913984317654407730594956997722=1 identifer, which is required for an unsigned package.
  • Das uap10: hostid- Attribut des Application -Elements identifiziert pythonhost als Host.The uap10:HostId attribute of the Application element identifies PythonHost as its host.

Ausführen des BeispielsRun the sample

Das Beispiel erfordert die Version 10.0.19041.0 oder höher von Windows 10 und die Windows SDK.The sample requires version 10.0.19041.0 or later of Windows 10 and the Windows SDK.

  1. Laden Sie das Beispiel in einen Ordner auf Ihrem Entwicklungs Computer herunter.Download the sample to a folder on your development computer.

  2. Öffnen Sie die Projekt Mappe pyscriptengine. sln in Visual Studio, und legen Sie das pyscriptenginepackage -Projekt als Startprojekt fest.Open the PyScriptEngine.sln solution in Visual Studio and set the PyScriptEnginePackage project as the startup project.

  3. Erstellen Sie das pyscriptenginepackage -Projekt.Build the PyScriptEnginePackage project.

  4. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Projekt pyscriptenginepackage , und wählen Siebereitstellen aus.In Solution Explorer, right-click the PyScriptEnginePackage project and choose Deploy.

  5. Öffnen Sie ein Eingabe Aufforderungs Fenster für das Verzeichnis, in das Sie die Beispieldateien kopiert haben, und führen Sie den folgenden Befehl aus, um die Beispiel- APP zu registrieren (die gehostete APP).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). Wechseln D:\repos\HostedApps Sie zu dem Pfad, in den Sie die Beispieldateien kopiert haben.Change D:\repos\HostedApps to the path where you copied the sample files.

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

    Hinweis

    Sie können pyscriptengine in der Befehlszeile ausführen, da der Host im Beispiel einen appexecutionaliasdeklariert.You can run pyscriptengine on the command line because the host in the sample declares an AppExecutionAlias.

  6. Öffnen Sie das Startmenü , und klicken Sie auf " zahlender ", um die gehostete App auszuführen.Open the Start menu and click NumberGuesser to run the hosted app.