通过


将 winapp CLI 与 Rust 配合使用

本指南演示如何将 winapp CLI 与 Rust 应用程序配合使用,以包标识进行调试,并将应用程序打包为 MSIX。

包标识是Windows app模型中的核心概念。 它允许应用程序access特定的 Windows API(例如通知、安全、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)
  • 发布者名称:按 Enter 接受默认值或输入名称
  • 版本:按 Enter 接受 1.0.0.0
  • 入口点:按 Enter 接受默认值(rust-app.exe)
  • 设置 SDK:选择“不设置 SDK”

这会为应用标识创建 appxmanifest.xmlAssets 文件夹。

5. 使用身份进行调试

  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 进行签名,以便进行生产分发。
  • 微软商店为你签署MSIX,无需在提交之前签署。
  • 对于支持的每个体系结构,可能需要单独的 MSIX 包(x64,Arm64)。