Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Vanaf Windows 10 versie 2004 kunt u gehoste apps maken. Een gehoste app deelt hetzelfde uitvoerbare bestand en dezelfde definitie als een bovenliggende host-app , maar het lijkt en gedraagt zich als een afzonderlijke app op het systeem.
Gehoste apps zijn handig voor scenario's waarin u wilt dat een onderdeel (zoals een uitvoerbaar bestand of scriptbestand) zich gedraagt als een zelfstandige Windows 10-app, maar het onderdeel vereist een hostproces om uit te voeren. Een PowerShell- of Python-script kan bijvoorbeeld worden geleverd als een gehoste app waarvoor een host moet worden geïnstalleerd om te kunnen worden uitgevoerd. Een gehoste app kan een eigen starttegel, identiteit en diepgaande integratie met Windows 10-functies hebben, zoals achtergrondtaken, meldingen, tegels en doelen delen.
De functie gehoste apps wordt ondersteund door verschillende elementen en kenmerken in het pakketmanifest waarmee een gehoste app een uitvoerbaar bestand en definitie in een host-app-pakket kan gebruiken. Wanneer een gebruiker de gehoste app uitvoert, start het besturingssysteem automatisch het uitvoerbare hostbestand onder de identiteit van de gehoste app. De host kan vervolgens visuele assets, inhoud laden of API's aanroepen als de gehoste app. De gehoste app verkrijgt het snijpunt van de functies die zijn gedeclareerd tussen de host en de gehoste app. Dit betekent dat een gehoste app niet om meer mogelijkheden kan vragen dan wat de host biedt.
Een host definiëren
De host is het belangrijkste uitvoerbare of runtimeproces voor de gehoste app. Momenteel zijn de enige ondersteunde hosts desktop-apps (.NET of C++ desktop) met pakketidentiteit. Er zijn verschillende manieren waarop een bureaublad-app pakketidentiteit heeft:
- De meest voorkomende manier om pakketidentiteit toe te kennen aan een desktop-app is door deze in een MSIX-pakket te verpakken.
- In sommige gevallen kunt u er ook voor kiezen om pakketidentiteit te verlenen door een pakket met externe locatie te maken (zie Pakketidentiteit verlenen door pakketten met externe locatie te verpakken). Deze optie is handig als u MSIX niet kunt gebruiken voor het installeren van uw bureaublad-app.
De host wordt gedeclareerd in het pakketmanifest door de uap10:HostRuntime-extensie . Deze extensie heeft een id-kenmerk dat moet worden toegewezen aan een waarde waarnaar ook wordt verwezen door het pakketmanifest voor de gehoste app. Wanneer de gehoste app wordt geactiveerd, wordt de host gestart onder de identiteit van de gehoste app en kan inhoud of binaire bestanden vanuit het gehoste app-pakket worden geladen.
In het volgende voorbeeld ziet u hoe u een host definieert in een pakketmanifest. De uap10:HostRuntime-extensie is pakketbreed en wordt daarom gedeclareerd als een onderliggend element van het pakketelement .
<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>
Noteer deze belangrijke details over de volgende elementen.
| Onderdeel | Bijzonderheden |
|---|---|
| uap10:Extension | De windows.hostRuntime categorie declareert een pakketbrede extensie die de runtime-informatie definieert die moet worden gebruikt bij het activeren van een gehoste app. Een gehoste app wordt uitgevoerd met de definities die in de extensie zijn gedeclareerd. Wanneer u de host-app gebruikt die in het vorige voorbeeld is gedeclareerd, wordt een gehoste app uitgevoerd als het uitvoerbare bestand De Executable, uap10:RuntimeBehavioren uap10:TrustLevel kenmerken geven de naam op van het binaire hostproces in het pakket en hoe de gehoste apps uitgevoerd worden. Een gehoste app die de kenmerken in het vorige voorbeeld gebruikt, wordt bijvoorbeeld uitgevoerd als de uitvoerbare PyScriptEngine.exe op gemiddeld IL-vertrouwensniveau. |
| uap10:HostRuntime | Het kenmerk Id declareert de unieke id van deze specifieke host-app in het pakket. Een pakket kan meerdere host-apps hebben en elk pakket moet een uap10:HostRuntime-element met een unieke id hebben. |
Een gehoste app declareren
Een gehoste app declareert een pakketafhankelijkheid van een host. De gehoste app maakt gebruik van de host-id (dat wil zeggen het id-kenmerk van de uap10:HostRuntime-extensie in het hostpakket) voor activering in plaats van een uitvoerbaar toegangspunt op te geven in een eigen pakket. De gehoste app bevat doorgaans inhoud, visuele assets, scripts of binaire bestanden die toegankelijk zijn voor de host. De TargetDeviceFamily--waarde in het gehoste app-pakket moet dezelfde waarde als de host hebben.
Gehoste app-pakketten kunnen worden ondertekend of niet ondertekend:
- Ondertekende pakketten kunnen uitvoerbare bestanden bevatten. Dit is handig in scenario's met een mechanisme voor binaire extensie, waardoor de host een DLL of geregistreerd onderdeel in het gehoste app-pakket kan laden.
- In de meeste scenario's bevat het niet-ondertekende pakket uitvoerbare inhoud. Maar een niet-ondertekend pakket dat alleen niet-uitvoerbare bestanden bevat, is handig in scenario's waarin de host alleen afbeeldingen, assets en inhoud of scriptbestanden moet laden. Niet-ondertekende pakketten moeten een speciale
OIDwaarde in hun identiteitselement bevatten of ze mogen zich niet registreren. Dit voorkomt dat niet-ondertekende pakketten conflicteren met of de identiteit van een ondertekend pakket spoofen.
Als u een gehoste app wilt definiëren, declareert u de volgende items in het pakketmanifest:
- Het element uap10:HostRuntimeDependency. Dit is een kindelement van het Afhankelijkheden-element.
- Het kenmerk uap10:HostId van het toepassingselement (voor een app) of het extensie-element (voor een activeringsbare extensie).
In het volgende voorbeeld ziet u de relevante secties van een pakketmanifest voor een niet-ondertekende gehoste 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 "NumberGuesser.py"">
</Application>
</Applications>
</Package>
Noteer deze belangrijke details over de volgende elementen.
| Onderdeel | Bijzonderheden |
|---|---|
| Identiteit | Omdat het gehoste app-pakket in dit voorbeeld niet is ondertekend, moet het kenmerk Publisher de OID.2.25.311729368913984317654407730594956997722=1 tekenreeks bevatten. Dit zorgt ervoor dat het niet-ondertekende pakket de identiteit van een ondertekend pakket niet kan spoofen. |
| TargetDeviceFamily | Het kenmerk MinVersion moet 10.0.19041.0 of een latere versie van het besturingssysteem opgeven. |
| uap10:HostRuntimeDependency | Dit elementelement declareert een afhankelijkheid van het host-app-pakket. Dit bestaat uit de Name en Publisher van het hostpakket, en de MinVersion waarvan het afhankelijk is. Deze waarden vindt u onder het element Identiteit in het hostpakket. |
| Het kenmerk uap10:HostId geeft de afhankelijkheid van de host aan. Het gehoste app-pakket moet dit kenmerk declareren in plaats van de gebruikelijke uitvoerbare en EntryPoint-kenmerken voor een toepassings - of extensie-element . Als gevolg hiervan neemt de gehoste app de Uitvoerbare-, EntryPoint- en runtime-attributen over van de host met de bijbehorende HostId-waarde. Het uap10:Parameters attribuut specificeert parameters die worden doorgegeven aan de entry point functie van het host-executable bestand. Omdat de host moet weten wat er met deze parameters moet worden uitgevoerd, is er een impliciet contract tussen de host en de gehoste app. |
Een niet-ondertekend gehost app-pakket registreren tijdens runtime
Een voordeel van de uap10:HostRuntime-extensie is dat een host dynamisch een gehost app-pakket kan genereren tijdens runtime en het kan registreren met behulp van de PackageManager-API , zonder dat u dit hoeft te ondertekenen. Hierdoor kan een host dynamisch de inhoud en het manifest voor het gehoste app-pakket genereren en het vervolgens registreren.
Gebruik de volgende methoden van de klasse PackageManager om een niet-ondertekend gehost app-pakket te registreren. Deze methoden zijn beschikbaar vanaf Windows 10 versie 2004.
- AddPackageByUriAsync-: registreert een niet-ondertekend MSIX-pakket met behulp van de eigenschap AllowUnsigned van de -opties parameter.
- RegisterPackageByUriAsync-: voert een losse registratie van pakketmanifestbestanden uit. Als het pakket is ondertekend, moet de map met het manifest een .p7x-bestand en -catalogus bevatten. Als deze niet is ondertekend, moet de eigenschap AllowUnsigned van de -opties parameter ingesteld worden.
Vereisten voor niet-ondertekende gehoste apps
- De toepassings- of extensie-elementen in het pakketmanifest kunnen geen activeringsgegevens bevatten, zoals uitvoerbare, EntryPoint- of TrustLevel-kenmerken . In plaats daarvan kunnen deze elementen alleen een uap10:HostId-kenmerk bevatten dat de afhankelijkheid van de host en een uap10:Parameters-kenmerk uitdrukt.
- Het pakket moet een hoofdpakket zijn. Het kan geen bundel, frameworkpakket, bron of optioneel pakket zijn.
Vereisten voor een host die een niet-ondertekend gehost app-pakket installeert en registreert
- De host moet beschikken over pakketidentiteit .
- De host moet de packageManagement-beperkte mogelijkheid hebben.
<rescap:Capability Name="packageManagement" />
Voorbeeld
Zie het voorbeeld van de gehoste app voor een volledig functionele voorbeeld-app die zichzelf als host declareert en vervolgens dynamisch een gehost app-pakket registreert tijdens runtime.
De host
De host heet PyScriptEngine. Dit is een wrapper die is geschreven in C# waarmee Python-scripts worden uitgevoerd. Wanneer deze wordt uitgevoerd met de -Register parameter, installeert de scriptengine een gehoste app die een Python-script bevat. Wanneer een gebruiker probeert de zojuist geïnstalleerde gehoste app te starten, wordt de host gestart en wordt het Python-script NumberGuesser uitgevoerd.
Het pakketmanifest voor de host-app (het bestand Package.appxmanifest in de map PyScriptEnginePackage) bevat een uap10:HostRuntime-extensie die de app declareert als host met de ID PythonHost en het uitvoerbare PyScriptEngine.exe.
Opmerking
In dit voorbeeld heet het pakketmanifest Package.appxmanifest en maakt het deel uit van een Windows Application Packaging-project. Wanneer dit project is gebouwd, genereert het een manifest met de naam AppxManifest.xml en bouwt het MSIX-pakket voor de host-app.
De gehoste app
De gehoste app bestaat uit een Python-script en pakketartefacten zoals het pakketmanifest. Het bevat geen PE-bestanden.
Het pakketmanifest voor de gehoste app (het NumberGuesser/AppxManifest.xml-bestand) bevat de volgende items:
- Het kenmerk Publisher van het identiteitselement bevat de
OID.2.25.311729368913984317654407730594956997722=1id, die vereist is voor een niet-ondertekend pakket. - Het kenmerk uap10:HostId van het toepassingselement identificeert PythonHost als host.
Het voorbeeld uitvoeren
Voor het voorbeeld is versie 10.0.19041.0 of hoger van Windows 10 en de Windows SDK vereist.
Download het voorbeeld naar een map op uw ontwikkelcomputer.
Open de PyScriptEngine.sln-oplossing in Visual Studio en stel het PyScriptEnginePackage-project in als het opstartproject.
Bouw het PyScriptEnginePackage-project .
Klik in Solution Explorer met de rechtermuisknop op het project PyScriptEnginePackage en kies Implementeren.
Open een opdrachtpromptvenster naar de map waarin u de voorbeeldbestanden hebt gekopieerd en voer de volgende opdracht uit om de voorbeeld-NumberGuesser-app (de gehoste app) te registreren. Wijzig
D:\repos\HostedAppsnaar het pad waar u de voorbeeldbestanden hebt gekopieerd.D:\repos\HostedApps>pyscriptengine -Register D:\repos\HostedApps\NumberGuesser\AppxManifest.xmlOpmerking
U kunt
pyscriptengineuitvoeren op de opdrachtregel omdat de host in het voorbeeld een AppExecutionAlias-declareert.Open het startmenu en klik op NumberGuesser om de gehoste app uit te voeren.