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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Assegnare un valore di default a un parametro di una lambda in C#
Semplificare il deployment di siti statici con Azure Static Web App
Generare token per autenicarsi sulle API di GitHub
Load test di ASP.NET Core con k6
Usare lo spread operator con i collection initializer in C#
Usare le collection expression per inizializzare una lista di oggetti in C#
Utilizzare la session affinity con Azure Container Apps
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Trasformare qualsiasi backend in un servizio GraphQL con Azure API Management
Creare form tipizzati con Angular
Copiare automaticamente le secret tra più repository di GitHub
Creare alias per tipi generici e tuple in C#