Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Počínaje Windows 10 verze 2004 můžete vytvářet hostované aplikace. Hostovaná aplikace sdílí stejný spustitelný soubor a definici jako nadřazená hostitelská aplikace, ale vypadá a chová se jako samostatná aplikace v systému.
Hostované aplikace jsou užitečné ve scénářích, kdy chcete, aby se komponenta (například spustitelný soubor nebo soubor skriptu) chovala jako samostatná aplikace pro Windows 10, ale komponenta k provedení vyžaduje hostitelský proces. Například skript PowerShellu nebo Pythonu je možné doručit jako hostovanou aplikaci, která vyžaduje instalaci hostitele, aby bylo možné spustit. Hostovaná aplikace může mít vlastní úvodní dlaždici, identitu a hlubokou integraci s funkcemi Windows 10, jako jsou úlohy na pozadí, oznámení, dlaždice a cíle sdílení.
Funkce hostovaných aplikací je podporována několika prvky a atributy v manifestu balíčku, které umožňují hostované aplikaci používat spustitelný soubor a definici v balíčku hostitelské aplikace. Když uživatel spustí hostované aplikace, operační systém automaticky spustí spustitelný soubor hostitele pod identitou hostované aplikace. Hostitel pak může načíst vizuální prostředky, obsah nebo volat API jako hostovaná aplikace. Hostovaná aplikace získá průnik schopností deklarovaných mezi hostem a hostovanou aplikací. To znamená, že hostovaná aplikace nemůže požádat o více funkcí, než jaké hostitel poskytuje.
Definování hostitele
Hostitel je hlavní spustitelný soubor nebo proces běhového prostředí hostované aplikace. V současné době jsou jedinými podporovanými hostiteli desktopové aplikace (.NET nebo C++), které mají identitu balíčku. Desktopová aplikace může mít identitu balíčku několika způsoby:
- Nejběžnější způsob, jak udělit identitě balíčku desktopové aplikaci, je jeho zabalením do balíčku MSIX.
- V některých případech se můžete alternativně rozhodnout udělit identitu balíčku vytvořením balíčku s externím umístěním (viz Udělení identity balíčku zabalením s externím umístěním). Tato možnost je užitečná, pokud nemůžete přijmout MSIX pro instalaci desktopové aplikace.
Hostitel je deklarován v manifestu balíčku rozšířením uap10:HostRuntime . Toto rozšíření má atribut ID , který musí mít přiřazenou hodnotu, na kterou odkazuje také manifest balíčku pro hostovanou aplikaci. Po aktivaci hostované aplikace se hostitel spustí pod identitou hostované aplikace a může načíst obsah nebo binární soubory z balíčku hostované aplikace.
Následující příklad ukazuje, jak definovat hostitele v manifestu balíčku. Rozšíření uap10:HostRuntime je platné pro celý balíček a proto se deklaruje jako podřízený element Package.
<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>
Zaznamenejte si tyto důležité podrobnosti o následujících prvcích.
| prvek | Podrobnosti |
|---|---|
| uap10:Extension | Kategorie windows.hostRuntime deklaruje rozšíření pro celý balíček, které definuje informace o modulu runtime, které se mají použít při aktivaci hostované aplikace. Hostovaná aplikace se spustí s definicemi deklarovanými v rozšíření. Při použití hostitelské aplikace deklarované v předchozím příkladu se hostovaná aplikace spustí jako spustitelný PyScriptEngine.exe na střední úrovni důvěryhodnosti .Atributy Spustitelný, uap10:RuntimeBehaviora uap10:TrustLevel určují název binárního souboru hostitelského procesu v balíčku a jak budou hostované aplikace spuštěny. Například hostovaná aplikace používající atributy v předchozím příkladu se spustí jako spustitelný soubor PyScriptEngine.exe na úrovni MediumIL důvěryhodnosti. |
| uap10:HostRuntime | Atribut ID deklaruje jedinečný identifikátor této konkrétní hostitelské aplikace v balíčku. Balíček může mít více hostitelských aplikací a každý z nich musí mít element uap10:HostRuntime s jedinečným ID. |
Deklarace hostované aplikace
Hostovaná aplikace deklaruje závislost balíčku na hostiteli. Hostovaná aplikace využívá ID hostitele (tj. atribut ID rozšíření uap10:HostRuntime v hostitelském balíčku) pro aktivaci místo určení spustitelného souboru vstupního bodu ve svém vlastním balíčku. Hostovaná aplikace obvykle obsahuje obsah, vizuální prostředky, skripty nebo binární soubory, ke kterým může hostitel přistupovat. Hodnota TargetDeviceFamily v balíčku hostované aplikace by měla cílit na stejnou hodnotu jako hostitel.
Balíčky hostovaných aplikací můžou být podepsané nebo nepodepsané:
- Podepsané balíčky mohou obsahovat spustitelné soubory. To je užitečné ve scénářích s binárním rozšiřujícím mechanismem, který hostiteli umožňuje načíst knihovnu DLL nebo zaregistrovanou komponentu v balíčku hostované aplikace.
- Ve většině scénářů bude nepodepsaný balíček obsahovat spustitelný obsah. Balíček bez znaménka, který obsahuje pouze nespustitelné soubory, je ale užitečný ve scénářích, kdy hostitel potřebuje načíst jenom obrázky, prostředky a soubory obsahu nebo skriptu. Balíčky bez znaménka musí v elementu
OIDobsahovat speciální hodnotu, jinak se nebudou moct zaregistrovat. Toto zabrání tomu, aby nepodepsané balíčky nevyvolaly konflikty nebo nefalšovaly identitu podepsaného balíčku.
Pokud chcete definovat hostované aplikace, deklarujte v manifestu balíčku následující položky:
- Element uap10:HostRuntimeDependency. Toto je prvek patřící k prvku Dependencies.
- Atribut uap10:HostId elementu Application (pro aplikaci) nebo Extension (pro aktivovatelné rozšíření).
Následující příklad ukazuje relevantní části manifestu balíčku pro nepodepsanou hostovanou aplikaci.
<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>
Zaznamenejte si tyto důležité podrobnosti o následujících prvcích.
| prvek | Podrobnosti |
|---|---|
| Identita | Vzhledem k tomu, že balíček hostované aplikace v tomto příkladu není podepsaný, musí atribut PublisheruOID.2.25.311729368913984317654407730594956997722=1 obsahovat řetězec. Tím zajistíte, že nepodepsaný balíček nemůže zoofovat identitu podepsaného balíčku. |
| TargetDeviceFamily | Atribut MinVersion musí určovat verzi operačního systému 10.0.19041.0 nebo novější. |
| uap10:HostRuntimeDependency | Tento element deklaruje závislost na balíčku hostitelské aplikace. Obsahuje název a vydavatele balíčku hostitele a minVersion, na které závisí. Tyto hodnoty najdete v elementu Identity v balíčku hostitele. |
| aplikace | Atribut uap10:HostId vyjadřuje závislost na hostiteli. Hostovaný balíček aplikace musí deklarovat tento atribut místo obvyklých atributů Executable a EntryPoint pro element Application nebo Extension. Hostovaná aplikace tak zdědí spustitelnou část, vstupní bod a atributy spuštění z hostitele s odpovídající hodnotou HostId. Atribut uap10:Parameters určuje parametry, které jsou předány funkci vstupního bodu hostitelského spustitelného souboru. Vzhledem k tomu, že hostitel potřebuje vědět, co s těmito parametry dělat, existuje implicitní kontrakt mezi hostitelem a hostovanou aplikací. |
Registrace nepodepsaného balíčku hostované aplikace za běhu
Jednou z výhod rozšíření uap10:HostRuntime je, že umožňuje hostiteli dynamicky generovat balíček hostované aplikace za běhu a zaregistrovat ho pomocí rozhraní API PackageManager , aniž by ho museli podepsat. To umožňuje hostiteli dynamicky generovat obsah a manifest pro balíček hostované aplikace a pak ho zaregistrovat.
K registraci nepodepsaného balíčku hostované aplikace použijte následující metody třídy PackageManager . Tyto metody jsou dostupné od Windows 10 verze 2004.
- AddPackageByUriAsync: Zaregistruje nepodepsaný balíček MSIX použitím vlastnosti AllowUnsigned v parametru možností .
- RegisterPackageByUriAsync: Provede registraci souboru manifestu volného balíčku. Pokud je balíček podepsaný, musí složka obsahující manifest obsahovat soubor .p7x a katalog. Pokud je nepodepsaný, musí být nastavena vlastnost AllowUnsigned u parametru možností.
Požadavky na nepodepsané hostované aplikace
- Elementy aplikace nebo rozšíření v manifestu balíčku nemohou obsahovat aktivační údaje, jako jsou atributy Spustitelný soubor, EntryPointnebo TrustLevel. Místo toho mohou tyto prvky obsahovat pouze atribut uap10:HostId , který vyjadřuje závislost na hostiteli a atribut uap10:Parameters .
- Balíček musí být hlavním balíčkem. Nemůže se jednat o balíček, balíček architektury, prostředek ani volitelný balíček.
Požadavky na hostitele, který nainstaluje a zaregistruje nepodepsaný balíček hostované aplikace
- Hostitel musí mít identitu balíčku.
- Hostitel musí mít packageManagementomezené schopnosti.
<rescap:Capability Name="packageManagement" />
Ukázka
Pro plně funkční ukázkovou aplikaci, která se deklaruje jako hostitel a poté dynamicky registruje hostovaný balíček aplikace za běhu, se podívejte na vzorek hostované aplikace .
Hostitel
Hostitel má název PyScriptEngine. Jedná se o obálku napsanou v jazyce C#, která spouští skripty Pythonu. Při spuštění s parametrem -Register nainstaluje skriptovací modul hostované aplikace obsahující skript Pythonu. Když se uživatel pokusí spustit nově nainstalovanou hostovanou aplikaci, hostitel se spustí a spustí skript NumberGuesser v jazyce Python.
Manifest balíčku pro hostitelskou aplikaci (soubor Package.appxmanifest ve složce PyScriptEnginePackage) obsahuje příponu uap10:HostRuntime , která deklaruje aplikaci jako hostitele s ID PythonHost a spustitelnýmPyScriptEngine.exe.
Poznámka:
V této ukázce má manifest balíčku název Package.appxmanifest a je součástí projektu Windows Application Packaging. Po sestavení tohoto projektu vygeneruje manifest s názvem AppxManifest.xml a sestaví balíček MSIX pro hostitelskou aplikaci.
Hostovaná aplikace
Hostovaná aplikace se skládá ze skriptu Pythonu a artefaktů balíčku, jako je manifest balíčku. Neobsahuje žádné soubory PE.
Manifest balíčku pro hostované aplikace (soubor NumberGuesser/AppxManifest.xml) obsahuje následující položky:
- Atribut Vydavatelelementu Identity obsahuje
OID.2.25.311729368913984317654407730594956997722=1identifikátor, který je vyžadován pro nepodepsaný balíček. - Atribut uap10:HostId prvku Application identifikuje PythonHost jako svého hostitele.
Spusťte ukázku
Ukázka vyžaduje verzi 10.0.19041.0 nebo novější windows 10 a sadu Windows SDK.
Otevřete řešení PyScriptEngine.sln v sadě Visual Studio a nastavte projekt PyScriptEnginePackage jako spouštěný projekt.
Sestavte projekt PyScriptEnginePackage .
V Průzkumníku řešení klikněte pravým tlačítkem na projekt PyScriptEnginePackage a zvolte Nasadit.
Otevřete okno příkazového řádku do adresáře, do kterého jste zkopírovali ukázkové soubory, a spuštěním následujícího příkazu zaregistrujte ukázkovou aplikaci NumberGuesser (hostovanou aplikaci). Změňte
D:\repos\HostedAppsna cestu, kam jste zkopírovali ukázkové soubory.D:\repos\HostedApps>pyscriptengine -Register D:\repos\HostedApps\NumberGuesser\AppxManifest.xmlPoznámka:
Na příkazovém řádku můžete spustit
pyscriptengine, protože hostitel v ukázce deklaruje AppExecutionAlias.Otevřete nabídku Start a kliknutím na NumberGuesser spusťte hostované aplikace.