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
Gestire i dati con Azure Cosmos DB Data Explorer
Change tracking e composition in Entity Framework
Anonimizzare i dati sensibili nei log di Azure Front Door
Ridurre il reflow cambiando il CSS
Creare una libreria CSS universale - Rotazione degli elementi
Recuperare le subissue e il loro stato di completamento in GitHub
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Eseguire query in contemporanea con EF
Gestione dell'annidamento delle regole dei layer in CSS
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Applicare un filtro per recuperare alcune issue di GitHub
Generare una User Delegation SAS in .NET per Azure Blob Storage
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Documentare i servizi REST con Swagger e OpenAPI con .NET 9
- Gestione file Javascript in Blazor con .NET 9
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!