Aplicações alojadas no SDK de Aplicações Windows

O modelo de aplicação alojada permite-lhe criar aplicações leves que herdam o seu executável e ponto de entrada de uma aplicação anfitriã. A aplicação alojada é um pacote separado que contém conteúdo (scripts, assets, configuração), mas depende do runtime do host para ser executado.

Como funcionam as aplicações alojadas

Uma aplicação anfitriã declara uma HostRuntime extensão no seu manifesto, tornando o seu executável disponível para outros pacotes. Uma aplicação alojada declara uma dependência desse host e especifica qual o conteúdo a executar. Quando o utilizador inicia a aplicação alojada, o Windows inicia o executável do anfitrião e passa o conteúdo da aplicação alojada como contexto.

Este modelo é útil para:

  • Motores de scripts — Um host fornece o tempo de execução (por exemplo, Python, Node.js), e as aplicações alojadas são scripts ou aplicações individuais.
  • Motores de jogo — Um host fornece o motor de jogo, e as aplicações alojadas são jogos individuais.
  • Frameworks de aplicações — Um anfitrião fornece um ambiente de execução da framework, e as aplicações alojadas são conteúdo executado nesse ambiente.

Importante

Tanto as aplicações host como as alojadas requerem identidade de pacote MSIX. A aplicação alojada é um pacote MSIX assinado, mas o seu executável vem do anfitrião.

Declarar um tempo de execução do host

Na aplicação Package.appxmanifest anfitriã, adicione uma extensão HostRuntime:

<Package xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10" ...>
  <Applications>
    <Application Id="App" Executable="MyHost.exe" EntryPoint="...">
      <Extensions>
        <uap10:Extension Category="windows.hostRuntime">
          <uap10:HostRuntime Id="MyHostRuntime" />
        </uap10:Extension>
      </Extensions>
    </Application>
  </Applications>
</Package>

O Id valor é aquilo que as aplicações alojadas referenciam para declarar a sua dependência.

Declarar uma aplicação alojada

No manifesto da aplicação alojada, declare a dependência do tempo de execução do host e especifique um TrustLevel e RuntimeBehavior:

<Package xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10" ...>
  <Dependencies>
    <uap10:HostRuntimeDependency Name="HostAppPackageFamilyName"
                                  Publisher="CN=HostPublisher"
                                  MinVersion="1.0.0.0" />
  </Dependencies>
  <Applications>
    <Application Id="App"
                 uap10:HostId="MyHostRuntime"
                 uap10:Parameters="&quot;script.py&quot;">
    </Application>
  </Applications>
</Package>

Atributos-chave:

Attribute Description
HostRuntimeDependency.Name Nome da família do pacote da aplicação anfitriã
HostId Corresponde à aplicação HostRuntime.Id anfitriã
Parameters Argumentos da linha de comandos passados para o executável do anfitrião

Criar um pacote de aplicação alojado

Para criar um pacote de aplicação alojado:

  1. Crie um projeto MSIX padrão ou use MakeAppx.exe.
  2. Inclua apenas os seus ficheiros de conteúdos (scripts, recursos, configuração).
  3. Não inclua um executável — este é fornecido pelo sistema anfitrião.
  4. Declara o HostRuntimeDependency no manifesto.
  5. Assine o pacote com um certificado de confiança para produção. Durante o desenvolvimento, pode registar o pacote sem assinatura (ver abaixo).

Registo de pacotes não assinados (desenvolvimento)

Durante o desenvolvimento, pode registar um pacote de aplicação alojada não assinado:

Add-AppxPackage -Path "HostedApp.msix" -AllowUnsigned

Note

O registo de pacotes não assinados é apenas para desenvolvimento. Para produção, assine o pacote com um certificado de confiança.

Exemplo: host de scripts Python

Uma aplicação de runtime em Python pode servir como hospedeiro:

  1. Aplicação anfitriã — Empacota python.exe e declara HostRuntime Id="PythonHost".
  2. Aplicação alojada — Contém um script Python (app.py) e declara HostId="PythonHost" com Parameters="app.py".
  3. Quando o utilizador inicia a aplicação alojada, o Windows executa a do anfitrião python.exe app.py com o diretório de pacotes da aplicação alojada como contexto de trabalho.