Rust ile winapp CLI kullanma

Bu kılavuzda, paket kimliğiyle hata ayıklamak ve uygulamanızı MSIX olarak paketlemek için RUST uygulamasıyla CLI'nin nasıl kullanılacağı winapp gösterilmektedir.

Tam bir çalışma örneği için bu depodaki Rust örneğine göz atın.

Paket kimliği, Windows app modelinde temel bir kavramdır. Uygulamanızın belirli Windows API'lerine (Bildirimler, Güvenlik, AI API'leri vb.) erişmesine, temiz bir yükleme/kaldırma deneyimine ve daha fazlasına erişmesine olanak tanır.

Standart bir yürütülebilir dosya (örneğin cargo build ile oluşturulan) paket kimliğine sahip değildir. Bu kılavuzda hata ayıklama için nasıl ekleneceği ve ardından dağıtım için nasıl paketleneceği gösterilmektedir.

Önkoşullar

  1. Rust Toolchain: Rust'ı rustup veya winget kullanarak yükleyin (veya zaten yüklüyse güncelleştirin):

    winget install Rustlang.Rustup --source winget
    
  2. winapp CLI: Aracı winget aracılığıyla yükleyin winapp (veya zaten yüklüyse güncelleştirin):

    winget install microsoft.winappcli --source winget
    

1. Yeni Bir Rust Uygulaması Oluşturma

Basit bir Rust uygulaması oluşturarak başlayın:

cargo new rust-app
cd rust-app

Her şeyin çalıştığından emin olmak için çalıştırın:

cargo run

Çıktı "Hello, world!" olmalıdır

2. Kimliği Denetlemek için Kodu Güncelleştirme

Uygulamanın paket kimliğiyle çalışıp çalışmadığını denetlemek için uygulamayı güncelleştireceğiz. Bu, sonraki adımlarda kimliğin düzgün çalıştığını doğrulamamıza yardımcı olur. Windows API'lere erişmek için windows kasasını kullanacağız.

İlk olarak şunu çalıştırarak bağımlılığınıza windows ekleyinCargo.toml:

cargo add windows --features ApplicationModel

Bu, kimlik denetimi için ApplicationModel API'sine erişmemizi sağlayan Package özelliğiyle Windows API bağlamalarını ekler.

Ardından içeriğinin tamamını src/main.rs aşağıdaki kodla değiştirin. Bu kod geçerli paket kimliğini almayı dener. Başarılı olursa Paket Aile Adı'nı yazdırır; aksi takdirde, "Paketlenmedi" yazdırır.

Note

Tam örnek, eğer kimlik varsa bir Windows Bildirimini göstermek için kodu da içerir, ancak bu kılavuzda kimlik denetimine odaklanacağız.

use windows::ApplicationModel::Package;

fn main() {
    match Package::Current() {
        Ok(package) => {
            match package.Id() {
                Ok(id) => match id.FamilyName() {
                    Ok(name) => println!("Package Family Name: {}", name),
                    Err(e) => println!("Error getting family name: {}", e),
                },
                Err(e) => println!("Error getting package ID: {}", e),
            }
        }
        Err(_) => println!("Not packaged"),
    }
}

3. Kimlik Olmadan Çalıştır

Şimdi uygulamayı her zamanki gibi derleyin ve çalıştırın:

cargo run

"Çıkışta 'Paketlenmedi' ifadesini görmeniz gerekir." Bu, standart yürütülebilir dosyanın herhangi bir paket kimliği olmadan çalıştığını onaylar.

4. winapp CLI ile Project başlatma

winapp init komutu, bir kerede ihtiyacınız olan her şeyi ayarlar: uygulama manifesti ve kaynaklar. Manifesto, Windows'un API erişimi vermek için kullandığı uygulamanızın kimliğini (ad, yayımcı, sürüm) tanımlar.

Aşağıdaki komutu çalıştırın ve istemleri izleyin:

winapp init

Sorulduğunda:

  • Paket adı: Varsayılanı kabul etmek için Enter tuşuna basın (rust-app)
  • Publisher name: Varsayılanı kabul etmek için Enter tuşuna basın veya adınızı girin
  • Sürüm: 1.0.0.0'ı kabul etmek için Enter'a basın
  • Açıklama: Varsayılanı kabul etmek veya bir açıklama girmek için Enter tuşuna basın
  • SDK'ları Ayarla: "SDK'ları Ayarlama" seçeneğini belirlemeyin (Rust, C++ SDK üst bilgilerini değil, kendi windows crate'ini kullanır)

Bu komut:

  • Oluşturma Package.appxmanifest — uygulamanızın kimliğini tanımlayan bildirim
  • Klasör oluşturma Assets — MSIX paketleme ve Mağaza gönderimi için gereken simgeler

Note

Hiçbir SDK paketi yönetilmediğinden, hiçbir winapp.yaml oluşturulmaz — Rust, windows crate'i Cargo aracılığıyla kullanır, bu nedenle winapp restore/update izleyecek bir şey yoktur.

Görüntü adı, yayımcı ve özellikler gibi unsurları daha fazla özelleştirmek için Package.appxmanifest açabilirsiniz.

Yürütme Takma Adı Ekle (konsol uygulamaları için)

Bir cargo new konsol uygulaması oluşturduğundan bildirime bir çalışma diğer adı eklememiz gerekir. Bu olmadan, winapp run AUMID etkinleştirmesi yoluyla uygulamayı başlatır ve yeni bir pencere açar — bir konsol uygulaması tamamlandığında bu pencere hemen kapanır ve çıktı görünmeden kaybolur.

Bağlantı ismi, kullanıcıların MSIX'i yükledikten sonra uygulamanızı herhangi bir terminalden ismiyle çalıştırmasına olanak tanır. Bildirim, rust-app.exe gibi bir takma adı kaydeder (varsayılan olarak projenizin exe adını alır), kullanıcılar bunu rust-app veya rust-app.exe olarak çağırabilir.

Kullanıcı arabirimi uygulaması (kendi penceresini oluşturan rust uygulaması) oluşturuyorsanız bu adımı atlayın. Bu uygulamalar, varsayılan AUMID başlatma ile sorunsuz çalışır.

Diğer adı ekleyin:

winapp manifest add-alias

Bu, uap5:ExecutionAlias öğesine bir Package.appxmanifest girdi ekler.

5. Kimlikle Hata Ayıklama

Uygulamayı tamamen paketlemeden kimlik gerektiren özellikleri (Bildirimler gibi) test etmek için kullanın winapp run. Bu, derleme çıktı klasörünün tamamını, gerçek bir MSIX yüklemesi gibi gevşek bir düzen paketi olarak kaydeder ve uygulamayı başlatır. Hata ayıklama için sertifika veya imzalama gerekmez.

  1. Yürütülebilir dosyayı oluşturun:

    cargo build
    
  2. Kimlikle çalıştır:

    winapp run .\target\debug --with-alias
    

Bayrak, uygulamayı kendi çalıştırma diğer adıyla başlatarak konsol çıkışının mevcut terminalde kalmasını sağlar. Bunun için uap5:ExecutionAlias 4. adımda eklediğimiz gerekir.

Note

winapp run ayrıca paketi sisteminize kaydeder. Bu nedenle, 6. adımda yüklemeyi denediğinizde MSIX "zaten yüklü" olarak görünebilir. İşiniz bittiğinde geliştirme paketlerini temizlemek için kullanın winapp unregister .

Şimdi şuna benzer bir çıkış görmeniz gerekir:

Package Family Name: rust-app_12345abcde

Bu, uygulamanızın geçerli bir paket kimliğiyle çalıştığını onaylar!

Tavsiye

Gelişmiş hata ayıklama iş akışları (hata ayıklayıcıları ekleme, IDE kurulumu, başlatma hata ayıklama) için Hata Ayıklama Kılavuzu'na bakın.

6. MSIX ile paketle

Uygulamanızı dağıtmaya hazır olduğunuzda, aynı bildirimi kullanarak bir MSIX olarak paketleyebilirsiniz. MSIX temiz yükleme/kaldırma, otomatik güncelleştirmeler ve güvenilir bir yükleme deneyimi sağlar.

Paket Dizinini Hazırlama

İlk olarak, en iyi performans için uygulamanızı yayın modunda derleyin:

cargo build --release

Ardından, yalnızca dağıtım için gereken dosyaları içeren bir dizin oluşturun. Klasör, target\release uygulamanızın parçası olmayan derleme yapıtlarını içerir; yalnızca yürütülebilir dosyaya ihtiyacımız vardır:

mkdir dist
copy .\target\release\rust-app.exe .\dist\

Geliştirme Sertifikası Oluşturma

MSIX paketleri imzalanmalıdır. Yerel test için otomatik olarak imzalanan bir geliştirme sertifikası oluşturun:

winapp cert generate --if-exists skip

Important

Sertifikanın yayımcısı Publisher içindeki Package.appxmanifest ile eşleşmelidir. Komut bunu cert generate bildiriminizden otomatik olarak okur.

İmzala ve Paketle

Artık tek bir adımda paketleyip oturum açabilirsiniz:

winapp pack .\dist --cert .\devcert.pfx 

Not: Komut, pack geçerli dizininizdeki Package.appxmanifest dosyasını otomatik olarak kullanır ve paketlemeden önce hedef klasöre kopyalar. Oluşturulan .msix dosyası geçerli dizinde olacaktır.

Sertifikayı Yükleme

MSIX paketini yükleyebilmeniz için önce makinenizdeki geliştirme sertifikasına güvenmeniz gerekir. Bu komutu yönetici olarak çalıştırın (bunu sertifika başına yalnızca bir kez yapmanız gerekir):

winapp cert install .\devcert.pfx

Yükleme ve Çalıştırma

Note

5. adımda kullandıysanız winapp run paket sisteminizde zaten kayıtlı olabilir. Önce geliştirme kaydını kaldırmak için kullanın winapp unregister , ardından yayın paketini yükleyin.

Oluşturulan .msix dosyaya çift tıklayarak veya PowerShell aracılığıyla paketi yükleyin:

Add-AppxPackage .\rust-app.msix

Artık şunu yazarak uygulamanızı terminalde herhangi bir yerden çalıştırabilirsiniz:

rust-app

Yüklendiğini ve kimlikle çalıştığını onaylayan "Paket Aile Adı" çıkışını görmeniz gerekir.

Tavsiye

Uygulamanızı yeniden paketlemeniz gerekiyorsa (örneğin, kod değişikliklerinden sonra), winapp pack’yi yeniden çalıştırmadan önce Package.appxmanifest içindeki Version değerini artırın. Windows yüklü bir paketi güncelleştirmek için daha yüksek bir sürüm numarası gerekir.

Tips

  1. Dağıtıma hazır olduğunuzda, kullanıcılarınızın otomatik olarak imzalanan bir sertifika yüklemesini gerektirmeyecek şekilde MSIX'inizi Sertifika Yetkilisi'nden bir kod imzalama sertifikasıyla imzalayabilirsiniz
  2. Microsoft Store MSIX'i sizin için imzalar, göndermeden önce imzalamanız gerekmez.
  3. Desteklediğiniz her mimari için bir tane olmak üzere birden çok MSIX paketi oluşturmanız gerekebilir (x64, Arm64)

Sonraki Adımlar