使用 Winapp CLI 搭配 Rust

本指南示範如何在 Rust 應用程式中使用 winapp CLI 來除錯,並以套件身份碼數除錯,並將應用程式打包為 MSIX。

套件身份是 Windows app 模型中的核心概念。 它讓你的應用程式能access特定的Windows介面(例如通知、安全、AI API等)、乾淨安裝/卸載體驗,還有更多功能。

先決條件

  1. Rust 工具鏈:使用 Rustup 或 winget 安裝 Rust:

    winget install Rustlang.Rustup --source winget
    
  2. winapp CLI:透過 winget 安裝工具 winapp

    winget install microsoft.winappcli --source winget
    

1. 建立新的 Rust 應用程式

cargo new rust-app
cd rust-app

執行它以確保一切正常:

cargo run

2. 更新代碼以驗證身份

將依賴加入windows到你的Cargo.toml:

cargo add windows --features ApplicationModel

替換以下 src/main.rs內容:

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. 匿名運行

cargo run

你應該看到「未包裝」這個字樣。

4. 使用 Winapp CLI 初始化專案

winapp init

出現提示時:

  • 套件名稱:按 Enter 以接受預設(rust-app)
  • Publisher name:按 Enter 接受預設或輸入你的名字
  • 版本:按下 "Enter" 以接受 1.0.0.0
  • 入口點:按 Enter 接受預設(rust-app.exe)
  • 設定 SDK:選擇「不要設定 SDK」

這樣會為您的應用程式身份建立名為appxmanifest.xmlAssets的資料夾。

使用身份進行除錯

  1. 建立執行檔

    cargo build
    
  2. 套用除錯身份

    winapp create-debug-identity .\target\debug\rust-app.exe
    
  3. 執行執行檔 (不要使用 cargo run ,因為可能會重建):

    .\target\debug\rust-app.exe
    

您應該看到:

Package Family Name: rust-app_12345abcde

6. MSIX 封裝

  1. 為發佈建置

    cargo build --release
    
  2. 準備套件目錄

    mkdir dist
    copy .\target\release\rust-app.exe .\dist\
    
  3. 產生開發證書

    winapp cert generate --if-exists skip
    
  4. 包裝與標誌

    winapp pack .\dist --cert .\devcert.pfx
    
  5. 安裝憑證 (以管理員身份執行):

    winapp cert install .\devcert.pfx
    
  6. 安裝與執行

    Add-AppxPackage .\rust-app.msix
    rust-app
    

小提示

  • 請用來自憑證授權中心的程式碼簽署憑證來簽署你的 MSIX,以便生產分發。
  • Microsoft Store 會幫你簽署 MSIX,提交前不需要先簽。
  • 你可能需要為每個支援的架構(x64、Arm64)分別準備 MSIX 套件。