Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Począwszy od systemu Windows 10 w wersji 2004, można utworzyć aplikacje hostowane . Aplikacja hostowana udostępnia ten sam plik wykonywalny i definicję co nadrzędna host aplikacji, ale wygląda i zachowuje się jak oddzielna aplikacja w systemie.
Hostowane aplikacje są przydatne w scenariuszach, w których składnik (taki jak plik wykonywalny lub plik skryptu) zachowuje się jak autonomiczna aplikacja systemu Windows 10, ale składnik wymaga procesu hosta w celu wykonania. Na przykład skrypt programu PowerShell lub języka Python można dostarczyć jako hostowaną aplikację, która wymaga zainstalowania hosta w celu uruchomienia. Aplikacja hostowana może mieć własny kafelek startowy, tożsamość i głęboką integrację z funkcjami systemu Windows 10, takimi jak zadania w tle, powiadomienia, kafelki i obiekty docelowe udostępniania.
Funkcja hostowanych aplikacji jest obsługiwana przez kilka elementów i atrybutów w manifeście pakietu, które umożliwiają hostowanej aplikacji używanie pliku wykonywalnego i definicji w pakiecie aplikacji hosta. Gdy użytkownik uruchamia hostowaną aplikację, system operacyjny automatycznie uruchamia plik wykonywalny hosta pod tożsamością hostowanej aplikacji. Host może następnie załadować zasoby wizualne, zawartość lub wywołać interfejsy API jako hostowaną aplikację. Aplikacja hostowana uzyskuje część wspólną możliwości zadeklarowanych między hostem a aplikacją hostowaną. Oznacza to, że hostowana aplikacja nie może poprosić o więcej możliwości niż zapewnia host.
Definiowanie hosta
host jest głównym procesem wykonywalnym lub uruchomieniowym aplikacji hostowanej. Obecnie jedynymi obsługiwanymi hostami są aplikacje dla komputerów stacjonarnych (.NET lub C++), które mają tożsamość pakietu . Istnieje kilka sposobów, aby aplikacja klasyczna miała tożsamość pakietu:
- Najczęstszym sposobem nadania tożsamości pakietu dla aplikacji klasycznej jest zapakowanie go jako pakiet MSIX.
- W niektórych przypadkach możesz też przyznać tożsamość pakietu, tworząc pakiet z lokalizacją zewnętrzną (zobacz Udzielanie tożsamości pakietu przez pakowanie z lokalizacją zewnętrzną). Ta opcja jest przydatna, jeśli nie możesz wdrożyć pliku MSIX do instalacji aplikacji przeznaczonej na komputery stacjonarne.
Host jest zadeklarowany w manifeście pakietu przez rozszerzenie uap10:HostRuntime. To rozszerzenie ma atrybut identyfikatora ,, który musi mieć przypisaną wartość, do której odwołuje się również manifest pakietu hostowanej aplikacji. Po aktywowaniu hostowanej aplikacji host jest uruchamiany w ramach tożsamości hostowanej aplikacji i może załadować zawartość lub pliki binarne z hostowanego pakietu aplikacji.
W poniższym przykładzie pokazano, jak zdefiniować hosta w manifeście pakietu. Rozszerzenie
<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>
Zanotuj te ważne szczegóły dotyczące następujących elementów.
| Składnik | Szczegóły |
|---|---|
| uap10:Extension | Kategoria windows.hostRuntime deklaruje rozszerzenie dla całego pakietu, które definiuje informacje o środowisku uruchomieniowym, które mają być używane podczas aktywowania hostowanej aplikacji. Aplikacja hostowana zostanie uruchomiona z definicjami zadeklarowanymi w rozszerzeniu. W przypadku korzystania z aplikacji hosta zadeklarowanej w poprzednim przykładzie, aplikacja hostowana będzie uruchamiana jako wykonywalna PyScriptEngine.exe na poziomie zaufania mediumIL.Atrybut Wykonywalny, uap10:RuntimeBehaviororaz uap10:TrustLevel określają nazwę pliku binarnego procesu hosta w pakiecie oraz sposób działania hostowanych aplikacji. Na przykład aplikacja hostowana przy użyciu atrybutów w poprzednim przykładzie będzie działać jako plik wykonywalny PyScriptEngine.exe na poziomie zaufania mediumIL. |
| uap10:HostRuntime | Atrybut Id deklaruje unikatowy identyfikator tej konkretnej aplikacji hosta w pakiecie. Pakiet może mieć wiele aplikacji hostów, a każda z nich musi zawierać element uap10:HostRuntime z unikatowym identyfikatorem . |
Deklarowanie hostowanej aplikacji
Aplikacja hostowana deklaruje zależność pakietu od hosta . Aplikacja hostowana korzysta z identyfikatora hosta (czyli atrybutu Id rozszerzenia uap10:HostRuntime w pakiecie hosta) do aktywacji zamiast podawania pliku wykonywalnego jako punktu wejścia we własnym pakiecie. Aplikacja hostowana zazwyczaj zawiera zawartość, zasoby wizualne, skrypty lub pliki binarne, do których może uzyskiwać dostęp host. Wartość TargetDeviceFamily w pakiecie hostowanej aplikacji powinna być docelowa tej samej wartości co host.
Hostowane pakiety aplikacji mogą być podpisane lub niepodpisane:
- Podpisane pakiety mogą zawierać pliki wykonywalne. Jest to przydatne w scenariuszach z mechanizmem rozszerzenia binarnego, który umożliwia hostowi ładowanie biblioteki DLL lub zarejestrowanego składnika w pakiecie hostowanej aplikacji.
- W większości scenariuszy niepodpisany pakiet będzie zawierać zawartość wykonywalną. Ale niepodpisany pakiet, który zawiera tylko niewykonywalnych plików, jest przydatny w scenariuszach, w których host musi ładować tylko obrazy, zasoby, treści, takie jak pliki skryptów. Niepodpisane pakiety muszą zawierać specjalną wartość
OIDw elemecie Identity lub nie będą mogli się zarejestrować. Zapobiega to konfliktom z niepodpisanymi pakietami lub podszywaniu się pod tożsamość podpisanego pakietu.
Aby zdefiniować hostowaną aplikację, zadeklaruj następujące elementy w manifeście pakietu:
- Element uap10:HostRuntimeDependency. To element będący potomkiem elementu Dependencies.
- Atrybut uap10:HostId elementu aplikacji (dla aplikacji) lub elementu rozszerzenia (dla rozszerzenia, które można aktywować).
W poniższym przykładzie pokazano odpowiednie sekcje manifestu pakietu dla niepodpisanej aplikacji hostowanej.
<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>
Zanotuj te ważne szczegóły dotyczące następujących elementów.
| Składnik | Szczegóły |
|---|---|
| Tożsamość | Ponieważ pakiet hostowanej aplikacji w tym przykładzie jest niepodpisany, atrybut Publisher musi zawierać ciąg OID.2.25.311729368913984317654407730594956997722=1. Gwarantuje to, że niepodpisany pakiet nie może sfałszować tożsamości podpisanego pakietu. |
| TargetDeviceFamily | Atrybut MinVersion musi określać 10.0.19041.0 lub nowszą wersję systemu operacyjnego. |
| uap10:HostRuntimeDependency | Ten element deklaruje zależność od pakietu aplikacji hosta. Składa się z nazwy i wydawcy pakietu hosta oraz MinimalnejWersji, od której jest zależny. Te wartości można znaleźć w elemecie Identity w pakiecie hosta. |
| Aplikacja | Atrybut uap10:HostId wyraża zależność od hosta. Pakiet hostowanej aplikacji musi zadeklarować ten atrybut zamiast zwykłych atrybutów wykonywalnych i EntryPoint dla elementu aplikacji lub rozszerzenia. W związku z tym aplikacja hostowana dziedziczy wykonywalny, EntryPoint i atrybuty środowiska uruchomieniowego z hosta z odpowiednią wartością HostId. Atrybut uap10:Parameters określa parametry przekazywane do funkcji wejściowej pliku wykonywalnego hosta. Ponieważ host musi wiedzieć, co zrobić z tymi parametrami, istnieje dorozumiany kontrakt między hostem a aplikacją hostowaną. |
Rejestrowanie niepodpisanego pakietu aplikacji hostowanej w czasie wykonywania
Jedną z zalet rozszerzenia
Użyj następujących metod klasy PackageManager, aby zarejestrować niepodpisany pakiet aplikacji hostowanej. Te metody są dostępne w systemie Windows 10 w wersji 2004.
- AddPackageByUriAsync: zarejestrowanie niepodpisanego pakietu MSIX za pomocą właściwości AllowUnsigned opcji parametru .
- RegisterPackageByUriAsync: wykonuje luźną rejestrację pliku manifestu pakietu. Jeśli pakiet jest podpisany, folder zawierający manifest musi zawierać plik .p7x i wykaz. Jeśli niepodpisane, należy ustawić właściwość AllowUnsigned parametru opcji .
Wymagania dotyczące niepodpisanych aplikacji hostowanych
- Elementy Application lub Extension w manifeście pakietu nie mogą zawierać danych aktywacji, takich jak atrybuty: Plik wykonywalny, EntryPointlub TrustLevel. Zamiast tego te elementy mogą zawierać tylko atrybut uap10:HostId, który wyraża zależność od hosta i atrybut uap10:Parameters.
- Pakiet musi być głównym pakietem. Nie może to być pakiet zbiorczy, pakiet szkieletowy, zasób lub opcjonalny pakiet.
Wymagania dotyczące hosta, który instaluje i rejestruje niepodpisany pakiet aplikacji hostowanej
- Host musi mieć tożsamość pakietu .
- Host musi mieć pakiet Zarządzanie możliwości z ograniczeniami.
<rescap:Capability Name="packageManagement" />
Przykład
Aby uzyskać w pełni funkcjonalną przykładową aplikację, która deklaruje się jako host, a następnie dynamicznie rejestruje pakiet hostowanej aplikacji w czasie wykonywania, zobacz przykładową aplikację hostowaną .
Gospodarz
Host ma nazwę PyScriptEngine. Jest to nakładka napisana w C#, która uruchamia skrypty Python. Po uruchomieniu za pomocą parametru -Register aparat skryptu instaluje hostowaną aplikację zawierającą skrypt języka Python. Gdy użytkownik próbuje uruchomić nowo zainstalowaną aplikację hostowaną, zostanie uruchomiony host i wykona skrypt NumberGuesser python.
Manifest pakietu dla aplikacji hosta (plik Package.appxmanifest w folderze PyScriptEnginePackage) zawiera rozszerzenie uap10:HostRuntime, które deklaruje aplikację jako host z identyfikatorem PythonHost i plikiem wykonywalnym PyScriptEngine.exe.
Uwaga / Notatka
W tym przykładzie manifest pakietu nosi nazwę Package.appxmanifest i jest częścią projektu tworzenia pakietów aplikacji systemu Windows
Hostowana aplikacja
Hostowana aplikacja składa się ze skryptu języka Python i artefaktów pakietu, takich jak manifest pakietu. Nie zawiera żadnych plików PE.
Manifest pakietu dla aplikacji hostowanej (plik NumberGuesser/AppxManifest.xml) zawiera następujące elementy:
- Atrybut Publisher elementu Identity zawiera
OID.2.25.311729368913984317654407730594956997722=1identyfikator, który jest wymagany dla niepodpisanego pakietu. - Atrybut
uap10:HostId elementu aplikacjiidentyfikuje PythonHost jako hosta.
Uruchamianie aplikacji przykładowej
Przykład wymaga wersji 10.0.19041.0 lub nowszej systemu Windows 10 i zestawu Windows SDK.
Otwórz rozwiązanie PyScriptEngine.sln w programie Visual Studio i ustaw projekt
PyScriptEnginePackage jako projekt startowy. Zbuduj projekt PyScriptEnginePackage.
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt PyScriptEnginePackage i wybierz pozycję Wdróż.
Otwórz okno wiersza polecenia w katalogu, w którym skopiowano przykładowe pliki, i uruchom następujące polecenie, aby zarejestrować przykładową aplikację NumberGuesser (hostowaną aplikację). Zmień
D:\repos\HostedAppsna ścieżkę, w której skopiowano przykładowe pliki.D:\repos\HostedApps>pyscriptengine -Register D:\repos\HostedApps\NumberGuesser\AppxManifest.xmlUwaga / Notatka
Możesz uruchomić
pyscriptenginew wierszu polecenia, ponieważ host w przykładzie deklaruje AppExecutionAlias.Otwórz menu Start i kliknij NumberGuesser, aby uruchomić hostowaną aplikację.