Estendere il numero di API utilizzabili nella Universal Windows Platform

di , in Windows 10,

Una delle difficoltà maggiori che incontrano gli sviluppatori che iniziano ad approcciare la Universal Windows Platform, soprattutto quelli provenienti da WPF o WinForms, è quella di poter eseguire qualsiasi tipologia di API: infatti, la Universal Windows Platform viene eseguita in un ambiente sandbox, pertanto, senza determinati permessi, non sarà possibile eseguire determinati tipi di operazioni.

Per avere accesso a tutte le API desktop a cui siamo abituati dal passato, è sufficiente invocare un'applicazione console (o comunque un eseguibile) dall'applicazione Universal Windows Platform che stiamo sviluppando. Questo richiede la seguente struttura progettuale:

  • L'applicazione Universal Windows Platform in sviluppo;
  • Un eseguibile o una console application (.NET Framework, per ora) che possa eseguire tutte le API di cui abbiamo bisogno;
  • Un'applicazione di tipo "Windows Application Packaging Project" che funge da bridge tra i due mondi.

Supponiamo di voler lanciare un eseguibile al click di un pulsante: una volta che il pulsante è stato aggiunto nell'applicazione UWP e che l'evento di click è stato gestito, possiamo avviare l'eseguibile tramite la modalità fullTrust come mostrato nell'esempio seguente:

if (ApiInformation.IsApiContractPresent("Windows.ApplicationModel.FullTrustAppContract", 1, 0))
{
  await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();
}

Poiché questo richiede permessi speciali che sono disponibili solo se l'applicazione UWP è distribuita tramite desktop (escludendo quindi Mobile, XBox, Surface Hub etc.), è necessario includere anche l'estensione "Windows Desktop Extensions for the UWP" come una normale reference.

L'applicazione da lanciare però, non è ancora stata specificata da nessuna parte ma questo richiede due passaggi: il primo è quello di aggiungere sia l'eseguibile (o la console application) sia l'applicazione UWP come reference nell'applicazione di tipo "Windows Application Packaging Project", mentre il secondo è quello di specificare, all'interno del file di manifest, che l'applicazione dovrà partire in modalità fullTrust e dovrà eseguire un eseguibile situato in un percorso specifico, come mostrato nell'esempio seguente:

<Extensions>
 <desktop:Extension
   xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
   Category="windows.fullTrustProcess"
   Executable="DesktopExtension\DesktopExtension.exe" />
</Extensions>

Se supponiamo che l'applicazione console da lanciare sia, ad esempio, questa:

class Program
{
    static void Main(string[] args)
    {
        Console.Title = "Launched from UWP";
        Console.WriteLine("Hello world!");
        Console.ReadLine();
    }
}

Alla pressione del pulsante sull'applicazione UWP, vedremo lanciarsi una console che stamperà a schermo la scritta "Hello World!" e che rimarrà in attesa di un input dall'utente.

Commenti

Visualizza/aggiungi commenti

Estendere il numero di API utilizzabili nella Universal Windows Platform (#225)
| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi