App MSIX AppContainer

L'argomento AppContainer per le applicazioni legacy illustra tutte le informazioni in background necessarie sull'ambiente AppContainer e sui vantaggi. Questo argomento contiene anche esempi di codice C# e C++ per verificare se un processo è in esecuzione all'interno di un AppContainer.

L'argomento che si sta leggendo illustra come è possibile acquisire un'app in pacchetto usando MSIX e configurarla facilmente per l'esecuzione nell'ambiente AppContainer (in un contenitore di app leggero). le app piattaforma UWP (Universal Windows Platform) (UWP) vengono automaticamente app AppContainer. Ma puoi anche configurare l'app desktop in pacchetto con MSIX come app AppContainer.

Il processo di un'app AppContainer e i relativi processi figlio vengono eseguiti all'interno di un contenitore di app leggero in cui possono accedere solo alle risorse concesse in modo specifico. E sono isolati usando il file system e la virtualizzazione del Registro di sistema. Di conseguenza, le app implementate in un AppContainer non possono essere compromesse per consentire azioni dannose al di fuori delle limitate risorse assegnate.

Suggerimento

Anche le app senza pacchetti possono essere eseguite in un AppContainer. Ma è particolarmente facile usare AppContainer se si usa MSIX. Di conseguenza, tutti gli scenari descritti in questo argomento riguardano le app in pacchetto.

Configurare un progetto WinUI 3 per AppContainer

I passaggi descritti in Creare un nuovo progetto per un'app desktop C# o C++ WinUI 3 in pacchetto mostrano il modo predefinito e consigliato per creare un nuovo progetto WinUI 3.

Per impostazione predefinita, il file del Package.appxmanifest progetto contiene la configurazione per un pacchetto di attendibilità totale ( ovvero livello di integrità medio). Le sezioni pertinenti hanno un aspetto simile al seguente:

...
<Applications>
  <Application ...
    EntryPoint="$targetentrypoint$">
    ...
  </Application>
</Applications>

<Capabilities>
  <rescap:Capability Name="runFullTrust" />
</Capabilities>
...

Per configurare il pacchetto come contenente un'app AppContainer, è possibile modificare l'attributo EntryPoint e rimuovere la dichiarazione di funzionalità con restrizioni (ma mantenere l'elemento Capabilities ). nel modo seguente:

...
<Applications>
  <Application ...
    EntryPoint="windows.partialTrustApplication">
    ...
  </Application>
</Applications>

<Capabilities/>
...

Se il pacchetto viene installato in Windows 10 versione 2004 (10.0; Build 19041) e/o versioni successive, quindi invece di impostare EntryPoint, è possibile impostare uap10:TrustLevel e uap10:RuntimeBehavior (dopo aver dichiarato il prefisso dello spazio dei nomi XML, come illustrato). nel modo seguente:

<Package ...
  xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10"
  ...>
...
  <Applications>
    <Application ...
      EntryPoint="$targetentrypoint$"
      uap10:TrustLevel="appContainer"
      uap10:RuntimeBehavior="packagedClassicApp">
      ...
    </Application>
  </Applications>

  <Capabilities/>
...

Per altre info, vedi questi argomenti:

Configurare una soluzione a due progetti WinUI 3 per AppContainer

La sezione precedente ha descritto il processo per MSIX a progetto singolo; che è consigliabile e qual è l'impostazione predefinita per i nuovi progetti WinUI 3. Per altre info, vedi Creare un pacchetto dell'app usando MSIX a progetto singolo.

Ma potresti avere un progetto WinUI 3 che risale a prima dell'introduzione della funzionalità MSIX a progetto singolo. In questo caso, nella soluzione saranno presenti due progetti, ovvero il progetto dell'app, oltre a un progetto di creazione di pacchetti di applicazioni Windows aggiuntivo. Se è possibile eseguire la migrazione del progetto a MSIX a progetto singolo, questo è l'ideale. Sarà anche possibile seguire le indicazioni riportate nella sezione precedente. Per altre info, vedi Creare un pacchetto dell'app usando MSIX a progetto singolo.

Se non è possibile eseguire la migrazione del progetto a MSIX a progetto singolo, questa sezione descrive come configurare il pacchetto come contenente un'app AppContainer.

Un progetto di creazione pacchetti di applicazioni Windows implica un'impostazione predefinita che esegue l'override della configurazione in Package.appxmanifest. Il progetto si comporta come se fosse presente una proprietà TrustLevel nel file di progetto impostata su un valore Full.

Per risolvere il valore della proprietà implicita, espandere il nodo Applicazioni dipendenze> del progetto di creazione del pacchetto e selezionare il nodo che rappresenta il riferimento al progetto WinUI 3. Quindi, nella finestra Proprietà di Visual Studio (non nelle proprietà del progetto), per la proprietà Livello di attendibilità selezionare il valore di Attendibilità parziale.

Il file di progetto per il progetto di creazione del pacchetto contiene ora questa proprietà esplicita:

...
<ItemGroup>
  <ProjectReference Include="...">
    <TrustLevel>Partial</TrustLevel>
  </ProjectReference>
</ItemGroup>
...

È ora possibile rimuovere <rescap:Capability Name="runFullTrust" /> dal file del progetto di creazione del Package.appxmanifest pacchetto.

Configurare un progetto di applicazione Windows (app win32 WndProc C++ ) per AppContainer

Questa sezione è utile se si dispone di un progetto WndProc Win32 C++ creato con il modello di progetto Progetto applicazione Windows. Il primo passaggio, in breve, consiste nell'aggiungere alla soluzione un progetto di creazione pacchetti di applicazioni Windows C++. Sono disponibili altri dettagli sui passaggi esatti descritti in Configurare l'applicazione desktop per la creazione di pacchetti MSIX in Visual Studio. Questo argomento si applica alle app desktop scritte in C++ o C#.

Aprire quindi il file di progetto del nuovo progetto di creazione del pacchetto e aggiungere una proprietà TrustLevel alla proprietà ProjectReference esistente come segue:

...
<ItemGroup>
  <ProjectReference Include="...">
    <TrustLevel>Partial</TrustLevel>
  </ProjectReference>
</ItemGroup>
...

Quando si compila, potrebbe essere visualizzato l'errore "error APPX1673: App manifest is missing required element 'Telefono Identity'". In tal caso, modificare il file del Package.appxmanifest progetto come segue:

<Package ...
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  ...>
...
  <mp:PhoneIdentity
      PhoneProductId="A GUID in the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx."
      PhonePublisherId="A GUID in the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.">
  </mp:PhoneIdentity>
...

Configurare un progetto WPF o WinForms per AppContainer

Questa sezione è disponibile se si dispone di uno dei due elementi seguenti:

  • un progetto di app Windows Presentation Foundation (WPF) creato con il modello di progetto applicazione WPF C#. In questo modo verrà creato un progetto .NET; ed è diverso dal modello di progetto denominato App WPF (.NET Framework). Or
  • un progetto di app Windows Form (WinForms) creato con il modello di progetto app Windows Form C#. In questo modo verrà creato un progetto .NET; ed è diverso dal modello di progetto denominato Windows Form App (.NET Framework).

Il primo passaggio, in breve, consiste nell'aggiungere alla soluzione un progetto di creazione pacchetti di applicazioni Windows C#. Sono disponibili altri dettagli sui passaggi esatti descritti in Configurare l'applicazione desktop per la creazione di pacchetti MSIX in Visual Studio.

Espandere quindi il nodo Dependencies>Applications del progetto di creazione del pacchetto e selezionare il nodo che rappresenta il riferimento al progetto WPF o WinForms. Quindi, nella finestra Proprietà di Visual Studio (non nelle proprietà del progetto), per la proprietà Livello di attendibilità selezionare il valore di Attendibilità parziale.