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
Utilizzare un service principal per accedere a Azure Container Registry
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Usare le navigation property in QuickGrid di Blazor
Gestire domini wildcard in Azure Container Apps
Configurare lo startup di applicazioni server e client con .NET Aspire
Sfruttare al massimo i topic space di Event Grid MQTT
Gestione dei nomi con le regole @layer in CSS
Limitare le richieste lato server con l'interactive routing di Blazor 8
Creare una libreria CSS universale - Rotazione degli elementi
Sostituire la GitHub Action di login su private registry
Paginare i risultati con QuickGrid in Blazor
Usare il colore CSS per migliorare lo stile della pagina