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í aliasu spuštění (volitelné, pro konzolové aplikace)

winapp run už bez tohoto kroku zachovává výstup konzolové aplikace ve vašem terminálu: v sestaveném binárním souboru rozpozná konzolovou aplikaci a do registrovaného balíčku vytvoří alias pro spuštění. Tento krok proto není potřeba k vývoji ani ladění.

Přidává to stabilní alias, který je součástí balíčku MSIX, takže po instalaci aplikace ji mohou z libovolného terminálu spustit zadáním jejího názvu. Manifest zaregistruje alias, například rust-app.exe (ve výchozím nastavení název souboru .exe vašeho projektu), volaný jako rust-app nebo rust-app.exe. Alias winapp se pro vývojové spuštění místo toho vygeneruje z identity vašeho balíčku, takže to není název, který byste chtěli publikovat.

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
    

Konzolová aplikace se automaticky spouští pomocí svého spouštěcího aliasu, takže její výstup zůstává v aktuálním terminálu — winapp to rozpozná podle sestaveného binárního souboru. Použije uap5:ExecutionAlias z kroku 4, pokud jste jej přidali, a jinak v balíčku, který zaregistruje, připraví vygenerovaný alias a vypíše název, který použil. Místo toho předejte --without-alias, aby se vynutila aktivace AUMID. V takovém případě aplikace zde nic nevypíše.

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 Version zvyšte hodnotu Package.appxmanifest. 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