通过


将 winapp CLI 与 Tauri 配合使用

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

包标识是Windows app模型中的核心概念。 它允许应用程序access特定的 Windows API(例如通知、安全、AI API 等),具有全新安装/卸载体验等。

先决条件

  1. Windows 11
  2. Node.js - winget install OpenJS.NodeJS --source winget
  3. winapp CLI - winget install microsoft.winappcli --source winget

1.创建新的 Tauri 应用

npm create tauri-app@latest

按照提示(Project名称:tauri-app,前端语言:JavaScript,Package manager:npm)。

导航到project目录并安装依赖项:

cd tauri-app
npm install

运行应用:

npm run tauri dev

2.更新代码以检查标识

后端变更(Rust)

添加windows依赖项。 打开 src-tauri/Cargo.toml

[target.'cfg(windows)'.dependencies]
windows = { version = "0.58", features = ["ApplicationModel"] }

打开 src-tauri/src/lib.rs 并添加命令:

#[tauri::command]
fn get_package_family_name() -> String {
    #[cfg(target_os = "windows")]
    {
        use windows::ApplicationModel::Package;
        match Package::Current() {
            Ok(package) => {
                match package.Id() {
                    Ok(id) => match id.FamilyName() {
                        Ok(name) => name.to_string(),
                        Err(_) => "Error retrieving Family Name".to_string(),
                    },
                    Err(_) => "Error retrieving Package ID".to_string(),
                }
            }
            Err(_) => "No package identity".to_string(),
        }
    }
    #[cfg(not(target_os = "windows"))]
    {
        "Not running on Windows".to_string()
    }
}

run 函数中注册命令:

pub fn run() {
    tauri::Builder::default()
        .plugin(tauri_plugin_opener::init())
        .invoke_handler(tauri::generate_handler![greet, get_package_family_name])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

前端更改 (JavaScript)

src/index.html中添加一个段落以显示结果:

<p id="pfn-msg"></p>

src/main.js中,调用命令:

const { invoke } = window.__TAURI__.core;

async function checkPackageIdentity() {
  const pfn = await invoke("get_package_family_name");
  const pfnMsgEl = document.querySelector("#pfn-msg");

  if (pfn !== "No package identity" && !pfn.startsWith("Error")) {
    pfnMsgEl.textContent = `Package family name: ${pfn}`;
  } else {
    pfnMsgEl.textContent = `Not running with package identity`;
  }
}

window.addEventListener("DOMContentLoaded", () => {
  checkPackageIdentity();
});

运行应用以确认它显示“未使用包标识运行”:

npm run tauri dev

3. 通过 winapp CLI 初始化项目

winapp init

出现提示时:

  • 包名称:按 Enter 接受默认值(tauri-app)
  • 发布者名称:按 Enter 接受默认值或输入名称
  • 版本:按 Enter 接受 1.0.0.0
  • 入口点:按 Enter 接受默认值(tauri-app.exe)
  • 设置 SDK:选择“不设置 SDK”

4.使用标识进行调试

将脚本添加到 package.json

"scripts": {
    "tauri:dev:withidentity": "cargo build --manifest-path src-tauri/Cargo.toml && winapp create-debug-identity src-tauri/target/debug/tauri-app.exe && .\\src-tauri\\target\\debug\\tauri-app.exe"
}

运行它:

npm run tauri:dev:withidentity

应会看到应用显示程序包系列名称。

5. 将包与 MSIX 配合使用

  1. 准备发布

    npm run tauri build
    
  2. 准备包目录

    mkdir dist
    copy .\src-tauri\target\release\tauri-app.exe .\dist\
    
  3. 生成开发证书

    winapp cert generate --if-exists skip
    
  4. 打包和签名

    winapp pack .\dist --cert .\devcert.pfx
    
  5. 安装证书 (以管理员身份运行):

    winapp cert install .\devcert.pfx
    
  6. 双击生成的文件进行.msix。 从“开始”菜单启动。