Použití rozhraní příkazového řádku winapp s Rustem

Tato příručka ukazuje, jak používat rozhraní příkazového řádku winapp s aplikací Rust k ladění aplikace s identitou balíčku a k zabalení vaší aplikace jako MSIX.

Kompletní funkční příklad najdete v ukázce Rustu v tomto úložišti.

Identita balíčku je základním konceptem modelu Windows app. Umožňuje vaší aplikaci přistupovat ke konkrétním rozhraním API Windows (jako jsou oznámení, zabezpečení, rozhraní API AI atd.), mají čisté prostředí pro instalaci a odinstalaci a další.

Standardní spustitelný soubor (například vytvořený pomocí cargo build) nemá identitu balíčku. Tento průvodce ukazuje, jak ho přidat pro ladění a pak ho zabalit pro distribuci.

Předpoklady

  1. Sada nástrojů Rust: Nainstalujte Rust pomocí rustupu nebo wingetu (nebo aktualizujte, pokud už je nainstalovaný):

    winget install Rustlang.Rustup --source winget
    
  2. winapp CLI: Nainstalujte nástroj prostřednictvím wingetu (nebo aktualizujte winapp , pokud už je nainstalovaný):

    winget install microsoft.winappcli --source winget
    

1. Vytvoření nové aplikace Rust

Začněte vytvořením jednoduché aplikace Rust:

cargo new rust-app
cd rust-app

Spusťte ho, abyste měli jistotu, že všechno funguje:

cargo run

Výstup by měl být "Hello, world!"

2. Aktualizace kódu pro kontrolu identity

Aplikaci aktualizujeme a zkontrolujeme, jestli běží s identitou balíčku. To nám pomůže ověřit, jestli identita funguje správně v dalších krocích. Pro přístup k rozhraním API Windows použijeme windows.

Nejprve přidejte závislost windows do svého Cargo.toml tím, že spustíte příkaz:

cargo add windows --features ApplicationModel

Tím se přidají vazby rozhraní API Windows pomocí funkce ApplicationModel, která nám umožňuje přístup k rozhraní API Package pro kontrolu identity.

Dále nahraďte celý obsah src/main.rs následujícím kódem. Tento kód se pokusí načíst aktuální identitu balíčku. Pokud bude úspěšný, vytiskne název rodiny balíčků; jinak se vytiskne "Není zabaleno".

Poznámka:

Ukázka úplná obsahuje také kód pro zobrazení notifikace Windows, pokud je identita k dispozici, ale v tomto průvodci se zaměříme na kontrolu identity.

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"),
    }
}

Spusťte (program) bez přiřazené identity.

Teď sestavte a spusťte aplikaci obvyklým způsobem:

cargo run

Měl by se zobrazit výstup "Není zabaleno". Tím potvrdíte, že standardní spustitelný soubor běží bez jakékoli identity balíčku.

4. Inicializace Project pomocí rozhraní příkazového řádku winapp

Příkaz winapp init nastaví vše, co potřebujete na jednom místě: manifest aplikace a prostředky. Manifest definuje identitu vaší aplikace (název, vydavatel, verzi), která Windows používá k udělení přístupu k rozhraní API.

Spusťte následující příkaz a postupujte podle pokynů:

winapp init

Po zobrazení výzvy:

  • Název balíčku: Stisknutím klávesy Enter přijměte výchozí hodnotu (rust-app).
  • Publisher název: Stisknutím klávesy Enter přijměte výchozí hodnotu nebo zadejte své jméno.
  • Verze: Stisknutím klávesy Enter přijměte verzi 1.0.0.0.
  • Popis: Stisknutím klávesy Enter přijměte výchozí hodnotu nebo zadejte popis.
  • Instalační sady SDK: Vyberte "Nenastavovat sady SDK" (Rust používá vlastní windows bednu, ne hlavičky sady C++ SDK).

Tento příkaz:

  • Vytvoření Package.appxmanifest – manifest, který definuje identitu vaší aplikace
  • Vytvoření Assets složky – ikony vyžadované pro balení MSIX a odesílání do Storu

Poznámka:

Vzhledem k tomu, že se nespravují žádné balíčky SDK, žádné není vytvořené – Rust používá crate přes Cargo, takže není nic, co by mohlo sledovat.

Můžete otevřít Package.appxmanifest a upravit vlastnosti, jako je zobrazovaný název, vydavatel a možnosti.

Přidání spuštěcího aliasu (pro konzolové aplikace)

Protože cargo new vytvoří konzolovou aplikaci, musíme do manifestu přidat alias spuštění. Bez ní winapp run spustí aplikaci prostřednictvím aktivace AUMID, která otevře nové okno – a toto okno se hned po dokončení konzolové aplikace zavře a spolkne jakýkoli výstup.

Alias také umožňuje uživatelům spustit aplikaci podle názvu z libovolného terminálu po instalaci MSIX. Manifest zaregistruje alias jako rust-app.exe (výchozí název exe projektu), který mohou uživatelé vyvolat jako rust-app nebo rust-app.exe.

Tento krok přeskočte, pokud vytváříte aplikaci uživatelského rozhraní (aplikace Rust, která vykresluje vlastní okno). Tyto aplikace fungují správně s výchozím spuštěním AUMID.

Přidejte alias:

winapp manifest add-alias

Přidá položku uap5:ExecutionAlias do Package.appxmanifest souboru.

5. Ladění pomocí identity

K otestování funkcí, které vyžadují identitu (například oznámení) bez plného balení aplikace, použijte winapp run. Tím se celá výstupní složka sestavení zaregistruje jako volný balíček rozložení – stejně jako skutečná instalace MSIX – a spustí aplikaci. Pro ladění není potřeba žádný certifikát ani podepisování.

  1. Sestavení spustitelného souboru:

    cargo build
    
  2. Spusťte s identitou:

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

Příznak --with-alias spustí aplikaci prostřednictvím svého aliasu spuštění, takže výstup konzoly zůstane v aktuálním terminálu. To vyžaduje uap5:ExecutionAlias, který jsme přidali v kroku 4.

Poznámka:

winapp run také zaregistruje balíček ve vašem systému. To je důvod, proč se MSIX může při pokusu o jeho instalaci později v kroku 6 zobrazit jako již nainstalovaný. Slouží winapp unregister k vyčištění vývojových balíčků po dokončení.

Teď by se měl zobrazit výstup podobný následujícímu:

Package Family Name: rust-app_12345abcde

Tím potvrdíte, že vaše aplikace běží s platnou identitou balíčku.

Návod

Pokročilé ladicí pracovní postupy (připojení ladicích programů, nastavení integrovaného vývojového prostředí, ladění po spuštění) najdete v průvodci laděním.

6. Balíček s MSIX

Jakmile budete připraveni distribuovat aplikaci, můžete ji zabalit jako MSIX pomocí stejného manifestu. MSIX poskytuje čistou instalaci/odinstalaci, automatické aktualizace a důvěryhodné instalační prostředí.

Příprava adresáře balíčků

Nejprve sestavte aplikaci v režimu vydávání, abyste mohli dosáhnout optimálního výkonu:

cargo build --release

Pak vytvořte adresář pouze se soubory potřebnými k distribuci. Složka target\release obsahuje artefakty sestavení, které nejsou součástí vaší aplikace – potřebujeme jenom spustitelný soubor:

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

Vygenerování vývojového certifikátu

Balíčky MSIX musí být podepsané. Pro místní testování vygenerujte vývojový certifikát podepsaný svým držitelem:

winapp cert generate --if-exists skip

Důležité

Publisher certifikátu musí odpovídat Publisher ve vašem Package.appxmanifest. Automaticky tento cert generate příkaz načte z manifestu.

Podepsání a balení

Nyní můžete zabalit a podepsat jedním krokem.

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

Poznámka: Příkaz pack před zabalení automaticky použije Package.appxmanifest z aktuálního adresáře a zkopíruje ho do cílové složky. Vygenerovaný soubor .msix bude v aktuálním adresáři.

Instalace certifikátu

Než budete moct nainstalovat balíček MSIX, musíte na svém počítači důvěřovat vývojovému certifikátu. Spusťte tento příkaz jako správce (stačí to udělat jenom jednou pro každý certifikát):

winapp cert install .\devcert.pfx

Instalace a spuštění

Poznámka:

Pokud jste tento balíček použili winapp run v kroku 5, možná už je v systému zaregistrovaný. Nejprve winapp unregister odeberte registraci vývojové verze a pak nainstalujte produkční balíček.

Nainstalujte balíček poklikáním na vygenerovaný .msix soubor nebo přes PowerShell:

Add-AppxPackage .\rust-app.msix

Teď můžete aplikaci spustit odkudkoli v terminálu zadáním:

rust-app

Měl by se zobrazit výstup "Název rodiny balíčků", čímž se potvrdí jeho instalace a spuštění pod danou identitou.

Návod

Pokud potřebujete aplikaci znovu přebalit (např. po změně kódu), před dalším spuštěním Package.appxmanifest zvyšte hodnotu Version. Windows k aktualizaci nainstalovaného balíčku vyžaduje vyšší číslo verze.

Tips

  1. Jakmile budete připraveni k distribuci, můžete MSIX podepsat certifikátem pro podepisování kódu od certifikační autority, aby uživatelé nemuseli instalovat samopodepsaný certifikát.
  2. Microsoft Store za vás podepíše MSIX, před odesláním se nemusíte podepisovat.
  3. Možná budete muset vytvořit několik balíčků MSIX, jeden pro každou architekturu, kterou podporujete (x64, Arm64).

Další kroky