WinUI ile Windows Terminali Oluşturma

WinUI  ve Windows Terminal'in geçmişi  Aralık 2017'ye kadar uzanıyor. Bu, Windows Terminal olacak uygulamanın ilk prototipinin başladığı zamandı. Windows Terminal ekibi  olarak, konsol ve bir terminal uygulaması arasında bir çeviri katmanı olarak faydalı olacak kadar iyi bir yere konpty almaya yeni başlamıştık  Windows'ta komut satırı için yeni bir kullanıcı deneyimi oluşturmamıza olanak tanıyan, yeni bir terminal uygulamasına güç sağlayabilecek bir yapıya sahip olmak istediğimizi biliyorduk.
Terminal için en erken planlama aşamalarındayken, Windows platformunun sunduğu en iyi özellikleri kullanan modern bir uygulama geliştirmek istediğimizi hemen biliyorduk. Diğer gelen kutusu uygulamalarıyla görsel olarak tutarlı olduğundan emin olmak istedik ve Akıcı Tasarım ilkelerini izledik.
UWP uygulaması olarak Windows Terminali oluşturmayı seçtik. Bu, bize hemen UWP XAML'ye ve özellikle Windows uygulamaları için oluşturulmuş yerel denetimler, stiller ve yetenekler içeren WinUI 2 kitaplığının tamamına erişim sağlar  O zamanlar, "UWP uygulamaları", işletim sistemi tarafından kendilerine özel kısıtlamalar getirmişti. Bu güvenlik özellikleri, Microsoft Store tarafından sağlanan UWP uygulamalarının işletim sistemi içindeki kısıtlı konumlara erişememesini veya kaldırma işlemini basitleştirmek için disk üzerinde yapıtlar bırakmamasını sağladı. Bu UWP uygulamalarının tümü, "düşük bütünlüklü uygulama kapsayıcı" içinde başlatılır; bu, temelde  hiçbir işletim sisteminde izinler. Çalışma dizinlerini değiştirmelerine bile izin verilmiyor. Harici işlemleri başlatmalarına izin verilir, ancak bu harici işlemler ayrıca uygulamanın bağlı olduğu aynı kısıtlamalara tabidir.
Bu nedenle, 2018'de Terminal'i bir UWP uygulaması olarak kurmak isteseydik, oluşturacağımız herhangi bir kabuk (cmd.exe, powershell.exe veya bash gibi) sisteme hiçbir şey yapamazdı. Dizinleri değiştirmeden, dosya içeriğini okumadan veya etkileşim kurabileceğiniz diğer işlemleri başlatmadan kabuğunuzu kullanmayı hayal edebiliyor musunuz? Açıkçası, bu bizim için bir başlangıç ??değildi.
O yılın büyük bir bölümünü seçeneklerimizi Windows organizasyonundaki bir dizi ekiple tartışarak geçirdik. Bir UWP'den tam güvenilir süreçleri başlatmak için özel bir kısıtlı yetenek gibi seçenekleri düşündük. UWP uygulamalarının uygulama kapsayıcısının dışında çalışmasına izin vermeye çalıştık. Bununla birlikte, takip ettiğimiz yolların çoğu ya açık bir güvenlik açığı ya da kuruluş genelinde yıllarca çaba gerektiren bir şey olarak sonuçlandı. (Aslında, bu tartışmaların çoğu, şimdi “ Proje Birleşimi ” olarak bilinen çabanın yanı sıra   modern UI çerçevesini Masaüstü uygulamalarına genişleten WinUI 3 çabasına yol açtı).

XAML Adaları

Neyse ki bizim için çözüm aslında düşündüğümüzden daha yakındı. Koridorun hemen aşağısında WinUI ekibi vardı ve çok az şey biliyorduk  , önceki yılın daha iyi bir kısmı için XAML Adaları inşa ediyorlardı  XAML Adaları, geleneksel Win32 tarzı bir uygulamanın, UWP uygulamasının geleneksel kısıtlamaları olmadan UWP XAML içeriğini kendi penceresinde barındırmasına olanak tanır. Görünüşe göre, bu tam  olarak  ihtiyacımız olan şeydi.
Sonunda inşa ettiğimiz şey, iki bölümden oluşan bir uygulamaydı:
  • Çoğunlukla ekrana bir pencere çizmekten ve XAML Barındırma altyapısını başlatmaktan sorumlu olan ince bir Win32 penceresi
  • Uygulamanın büyük kısmı WinUI 2 kullanan bir UWP XAML Uygulaması olarak oluşturulmuştur. Bu katman, bir Win32 penceresi tarafından barındırıldığını bile bilmez. Tek bildiği, bu sadece normal bir C++/WinRT UWP uygulamasıdır.
Bu model, Terminal'in her iki dünyanın da en iyisini elde etmesini sağlar. Bir Win32 uygulaması olarak, bir terminal uygulamasının işlemleri başlatmak ve dosya sistemini sorgulamak için ihtiyaç duyabileceği tüm eski Win32 API'lerini kullanabiliriz. Ayrıca UWP XAML ve WinUI 2'nin gücünü, Terminal kullanıcı arabirimini hızlı ve güzel bir şekilde oluşturmaya yardımcı olmak için kullanabildik.
 

13.08.2021

Diğer Haberler