Winapp CLI használata a Rust használatával

Ez az útmutató bemutatja, hogyan használhatja a winapp CLI-t egy Rust-alkalmazással a csomagadentitás hibakereséséhez és az alkalmazás MSIX-ként való csomagolásához.

A teljes munkapéldát az adattár Rust-mintájában tekintsd meg.

A csomagidentitás a Windows app modell alapvető fogalma. Lehetővé teszi, hogy az alkalmazás hozzáférjen bizonyos Windows API-khoz (például értesítések, biztonság, AI API-k stb.), tiszta telepítési/eltávolítási felülettel rendelkezik, és így tovább.

Egy standard végrehajtható fájl (mint amilyet a cargo build-vel hoznak létre) nem rendelkezik csomagidentitással. Ez az útmutató bemutatja, hogyan lehet egy elemet hozzáadni hibakereséshez, majd hogyan csomagolhatja be terjesztés céljából.

Előfeltételek

  1. Rust Toolchain: A Rust telepítése rustup vagy winget használatával (vagy frissítés, ha már telepítve van):

    winget install Rustlang.Rustup --source winget
    
  2. winapp CLI: Telepítse az eszközt a winapp wingettel (vagy frissítse, ha már telepítve van):

    winget install microsoft.winappcli --source winget
    

1. Új Rust-alkalmazás létrehozása

Először hozzon létre egy egyszerű Rust-alkalmazást:

cargo new rust-app
cd rust-app

Futtassa le, hogy megbizonyosodjon arról, minden rendben működik:

cargo run

A kimenetnek a következőnek kell lennie: "Hello, world!"

2. Kód frissítése az identitás ellenőrzéséhez

Frissítjük az alkalmazást, hogy ellenőrizze, a csomagazonossággal fut-e. Ez segít ellenőrizni, hogy az identitás megfelelően működik-e a későbbi lépésekben. A windows láda használatával fogjuk elérni Windows API-kat.

Először adja hozzá a windows függőséget a Cargo.toml parancs futtatásával.

cargo add windows --features ApplicationModel

Ez hozzáadja a Windows API-kötéseket a ApplicationModel funkcióval, amely hozzáférést biztosít az identitás ellenőrzéséhez szükséges Package API-hoz.

Ezután cserélje le a teljes tartalmat src/main.rs a következő kódra. Ez a kód megkísérli lekérni az aktuális csomagidentitást. Ha sikerül, kinyomtatja a csomagcsalád nevét; ellenkező esetben a "Nincs csomagolva" felirat jelenik meg.

Megjegyzés:

A full-minta tartalmaz egy Windows értesítés megjelenítésére szolgáló kódot is, ha identitás van jelen, de ebben az útmutatóban az identitásellenőrzésre összpontosítunk.

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. Futtatás identitás nélkül

Most hozza létre és futtassa az alkalmazást a szokásos módon:

cargo run

A "Nincs csomagolva" kimenetnek kell megjelennie. Ez megerősíti, hogy a standard végrehajtható fájl csomagidentitás nélkül fut.

4. A Project inicializálása winapp parancssori felülettel

A winapp init parancs egyetlen lépésben állítja be a szükséges elemeket: az alkalmazásjegyzéket és az eszközöket. A jegyzék meghatározza az alkalmazás identitását (név, közzétevő, verzió), amelyet Windows api-hozzáférés biztosításához használ.

Futtassa a következő parancsot, és kövesse az utasításokat:

winapp init

Amikor a rendszer kéri:

  • Csomag neve: Nyomja le az Enter billentyűt az alapértelmezett (rust-app) elfogadásához
  • Publisher név: Az Enter billentyűt lenyomva fogadja el az alapértelmezett értéket, vagy adja meg a nevét
  • Verzió: Nyomja le az Enter billentyűt az 1.0.0.0 elfogadásához
  • Leírás: Nyomja le az Enter billentyűt az alapértelmezett érték elfogadásához, vagy adjon meg egy leírást
  • SDK-k beállítása: Válassza a "Ne állítsd be az SDK-kat" lehetőséget (A Rust a saját windows ládát használja, nem a C++ SDK fejléceket)

Ez a parancs a következő lesz:

  • Létrehozza Package.appxmanifest – az alkalmazás identitását meghatározó jegyzék
  • Mappa létrehozása Assets – az MSIX-csomagoláshoz és az Áruház beküldéséhez szükséges ikonok

Megjegyzés:

Mivel nem kezelik az SDK-csomagokat, nem winapp.yaml jön létre – Rust a Cargo-n keresztül használja a windows crate-et, így nincs mit winapp restore/update nyomon követnie.

Megnyithatja Package.appxmanifest az olyan tulajdonságok további testreszabásához, mint a megjelenítendő név, a közzétevő és a képességek.

Végrehajtási alias hozzáadása (konzolalkalmazásokhoz)

Mivel cargo new létrehoz egy konzolalkalmazást, végrehajtási aliast kell hozzáadnunk a jegyzékhez. Nélküle winapp run elindítja az alkalmazást az AUMID aktiválással, amely egy új ablakot nyit meg – és az ablak azonnal bezárul, amikor egy konzolalkalmazás befejeződik, és lenyeli a kimenetet.

Az alias lehetővé teszi, hogy a felhasználók az MSIX telepítése után név alapján futtatják az alkalmazást bármely terminálról. A jegyzékfájl egy aliast, például rust-app.exe regisztrál (ami alapértelmezés szerint a projekt exe nevéhez igazodik), amelyet a felhasználók rust-app vagy rust-app.exe néven hívhatnak meg.

Hagyja ki ezt a lépést, ha felhasználói felületi alkalmazást ( a saját ablakát megjelenítő Rust-alkalmazást) hoz létre. Ezek az alkalmazások jól működnek az alapértelmezett AUMID-indítással.

Adja hozzá az aliast:

winapp manifest add-alias

Ez hozzáad egy uap5:ExecutionAlias bejegyzést a Package.appxmanifest fájlhoz.

5. Hibakeresés identitással

Az identitást (például értesítéseket) igénylő funkciók teszteléséhez az alkalmazás teljes csomagolása nélkül használja a következőt winapp run: . Ez a teljes buildkimeneti mappát laza elrendezési csomagként regisztrálja – akárcsak egy valódi MSIX-telepítést –, és elindítja az alkalmazást. A hibakereséshez nincs szükség tanúsítványra vagy aláírásra.

  1. A végrehajtható fájl létrehozása:

    cargo build
    
  2. Futtatás identitással:

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

A --with-alias jelző a végrehajtási aliasán keresztül indítja el az alkalmazást, így a konzol kimenete az aktuális terminálban marad. Ehhez szükség van a uap5:ExecutionAlias-re, amit a 4. lépésben adtunk hozzá.

Megjegyzés:

winapp run a csomagot a rendszeren is regisztrálja. Ezért előfordulhat, hogy az MSIX "már telepítve" állapotban jelenik meg, amikor később a 6. lépésben megpróbálja telepíteni. A fejlesztési csomagok megtisztítására használható winapp unregister , ha elkészült.

Most a következőhöz hasonló kimenetnek kell megjelennie:

Package Family Name: rust-app_12345abcde

Ez megerősíti, hogy az alkalmazás érvényes csomagazonosítóval fut!

Jótanács

A speciális hibakeresési munkafolyamatokat (hibakeresők csatolása, IDE-beállítás, indítási hibakeresés) a hibakeresési útmutatóban találja.

6. Csomag MSIX-lel

Miután készen áll az alkalmazás terjesztésére, ugyanazzal a jegyzékfájllal MSIX-ként csomagolhatja be. Az MSIX tiszta telepítést/eltávolítást, automatikus frissítéseket és megbízható telepítési élményt biztosít.

A csomagkönyvtár előkészítése

Először hozza létre az alkalmazást kiadási módban az optimális teljesítmény érdekében:

cargo build --release

Ezután hozzon létre egy könyvtárat, amely csak a terjesztéshez szükséges fájlokat tartalmazza. A target\release mappa olyan összeállítási összetevőket tartalmaz, amelyek nem részei az alkalmazásnak – csak a végrehajtható fájlra van szükségünk:

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

Fejlesztési tanúsítvány létrehozása

Az MSIX-csomagokat alá kell írni. Helyi teszteléshez hozzon létre egy önaláírt fejlesztési tanúsítványt:

winapp cert generate --if-exists skip

Fontos

A tanúsítvány kiadójának meg kell egyeznie a Publisher-vel a Package.appxmanifest-ben. A cert generate parancs ezt automatikusan felolvassa a jegyzékből.

Aláírás és csomagolás

Most már egy lépésben csomagolhat és jelentkezhet be:

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

Megjegyzés: A pack parancs automatikusan a Package.appxmanifestet használja az aktuális könyvtárból, és a csomagolás előtt átmásolja a célmappába. A létrehozott .msix fájl az aktuális könyvtárban lesz.

A tanúsítvány telepítése

Az MSIX-csomag telepítése előtt meg kell bíznia a fejlesztési tanúsítványban a számítógépen. Futtassa ezt a parancsot rendszergazdaként (ezt tanúsítványonként csak egyszer kell elvégeznie):

winapp cert install .\devcert.pfx

Telepítés és futtatás

Megjegyzés:

Ha az 5. lépésben használta winapp run , előfordulhat, hogy a csomag már regisztrálva van a rendszeren. Először winapp unregister távolítsa el a fejlesztési regisztrációt, majd telepítse a kiadási csomagot.

Telepítse a csomagot a létrehozott .msix fájlra duplán kattintva vagy a PowerShell-lel:

Add-AppxPackage .\rust-app.msix

Mostantól a terminál bármely pontjáról futtathatja az alkalmazást a következő beírással:

rust-app

Látnia kell a "Csomagcsalád neve" kimenetet, amely megerősíti, hogy telepítve van, és identitással fut.

Jótanács

Ha újra kell csomagolnia az alkalmazást (például a kódmódosítások után), növelje a verziószámot a VersionPackage.appxmanifest futtatása előtt. Windows egy telepített csomag frissítéséhez magasabb verziószám szükséges.

Tips

  1. Miután készen áll a terjesztésre, aláírhatja az MSIX-et egy hitelesítésszolgáltató kódaláíró tanúsítványával, hogy a felhasználóknak ne kelljen önaláírt tanúsítványt telepíteniük
  2. A Microsoft Store aláírja Önnek az MSIX-et, a beküldés előtt nem kell aláírnia.
  3. Előfordulhat, hogy több MSIX-csomagot kell létrehoznia, egyet minden támogatott architektúrához (x64, Arm64)

Következő lépések