Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве показано, как использовать winapp CLI с приложением Tauri для отладки, используя идентичность пакета, и упаковки приложения в MSIX.
Идентификатор пакета — это основная концепция модели приложений Windows. Это позволяет приложению получать доступ к определенным API-интерфейсам Windows (например, уведомлениям, безопасности, API ИИ и т. д.), иметь чистый интерфейс установки и удаления и многое другое.
Полный рабочий пример см. в примере Tauri в этом репозитории.
Необходимые условия
- Windows 11
-
Node.js -
winget install OpenJS.NodeJS --source winget -
Цепочка инструментов Rust — установка Rust с помощью rustup или
winget install Rustlang.Rustup --source winget -
winapp CLI -
winget install microsoft.winappcli --source winget
Tip
Если они уже установлены, выполните winget install команды, чтобы проверить наличие обновлений.
1. Создание нового приложения Tauri
Начните с создания нового приложения Tauri с помощью официального средства формирования шаблонов:
npm create tauri-app@latest
Следуйте инструкциям.
-
Имя проекта:
tauri-app(или предпочитаемое имя) -
Интерфейсный язык:
JavaScript -
Диспетчер пакетов:
npm -
Шаблон пользовательского интерфейса:
Vanilla -
Вкус пользовательского интерфейса:
JavaScript
Перейдите к каталогу project и установите зависимости:
cd tauri-app
npm install
Запустите приложение, чтобы убедиться, что все работает:
npm run tauri dev
2. Обновление кода для проверки удостоверения
Мы обновим приложение, чтобы проверить, работает ли оно с идентификацией пакета. Мы будем использовать крейт windows в серверной части на Rust для доступа к API Windows и предоставления его на клиентскую часть.
Изменения серверной части (Rust)
Добавьте зависимость: откройте
src-tauri/Cargo.tomlи добавьте следующие строки в конце файла. При этом добавляются привязки API Windows, чтобы проверить идентичность пакета.[target.'cfg(windows)'.dependencies] windows = { version = "0.58", features = ["ApplicationModel"] }Добавить команду: откройте
src-tauri/src/lib.rsи добавьте функциюget_package_family_name. Поместите его перед функциейpub fn run():#[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() } }Регистрация команды: в том же файле (
src-tauri/src/lib.rs) обновитеrunфункцию, чтобы зарегистрировать новую команду:pub fn run() { tauri::Builder::default() .plugin(tauri_plugin_opener::init()) .invoke_handler(tauri::generate_handler![greet, get_package_family_name]) // Add get_package_family_name here .run(tauri::generate_context!()) .expect("error while running tauri application"); }
Изменения на стороне фронтенда (JavaScript)
Обновление HTML: откройте
src/index.htmlи добавьте абзац, чтобы отобразить результат:<!-- ... inside <main> ... --> <p id="pfn-msg"></p>Обновление логики: откройте
src/main.js, чтобы вызвать команду и отобразить результат:const { invoke } = window.__TAURI__.core; // ... existing code ... 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", () => { // ... existing code ... checkPackageIdentity(); });Теперь запустите приложение как обычно:
npm run tauri devВы должны увидеть сообщение "Не запущено с удостоверением пакета" в окне приложения. Это подтверждает, что стандартная сборка для разработки выполняется без идентификации пакета.
3. Инициализация проекта с помощью winapp CLI
Команда winapp init настраивает все, что вам нужно в один заход: манифест приложения и ресурсы. Манифест определяет удостоверение приложения (имя, издатель, версия), которое Windows используется для предоставления доступа к API.
Выполните следующую команду и следуйте подсказкам.
winapp init
Когда появится запрос:
- Имя пакета: нажмите Enter, чтобы принять значение по умолчанию (tauri-app)
- Имя издателя: нажмите клавишу Enter, чтобы принять значение по умолчанию или введите своё имя.
- Версия: нажмите клавишу ВВОД, чтобы принять 1.0.0.0
- Точка входа: нажмите клавишу ВВОД, чтобы принять значение по умолчанию (tauri-app.exe)
-
Пакеты SDK для установки: выберите "Не настраивать пакеты SDK" (Tauri использует ячейку Rust
windows, а не заголовки пакета SDK для C++)
Эта команда выполнит следующее действие:
- Создайте
Package.appxmanifest— манифест, определяющий идентичность вашего приложения. - Создание
Assetsпапки — значки, необходимые для упаковки MSIX и отправки в Магазин
Замечание
Поскольку пакеты SDK не управляются, winapp.yaml не создаётся. Tauri использует крейт Rust windows через Cargo, поэтому нет ничего для отслеживания winapp restore/update.
Вы можете открыть Package.appxmanifest, чтобы дополнительно настроить такие свойства, как отображаемое имя, издатель и возможности.
4. Отладка с помощью идентификации
Чтобы выполнить отладку с идентификатором, необходимо создать серверную часть на Rust и запустить её с помощью winapp run. Поскольку npm run tauri dev управляет жизненным циклом процесса, внедрять идентификатор там сложнее. Вместо этого мы создадим пользовательский скрипт. Для отладки не требуется сертификат или подпись.
Добавление скрипта: откройте
package.jsonи добавьте новый скриптtauri:dev:withidentity:"scripts": { "tauri": "tauri", "tauri:dev:withidentity": "cargo build --manifest-path src-tauri/Cargo.toml && (if not exist dist mkdir dist) && copy /Y src-tauri\\target\\debug\\tauri-app.exe dist\\ >nul && winapp run .\\dist" }Что делает этот скрипт:
-
cargo build ...: перекомпилирует серверную часть Rust. -
copy ... dist\\: Помещает только файл exe в папкуdist(папкаtarget\debugочень большая и содержит промежуточные артефакты сборки, которые не являются частью вашего приложения). -
winapp run .\\dist: регистрирует свободный пакет макета (как и реальную установку MSIX) и запускает приложение.
-
Запустите скрипт:
npm run tauri:dev:withidentity
Tip
Вы можете увидеть окно терминала или консоли за окном приложения — это нормально для сборок отладки Tauri (это консоль процесса Rust).
Теперь вы увидите, что приложение открыто и отображает имя семейства пакетов, убедитесь, что оно запущено с удостоверением! Теперь можно начать использовать и отлаживать API, для которых требуется удостоверение пакета, такие как уведомления или новые API искусственного интеллекта, такие как Phi Silica.
Tip
winapp run также регистрирует пакет в системе. Поэтому MSIX может отображаться как "уже установлен" при попытке установить его позже на шаге 5. Используйте winapp unregister для очистки пакетов разработки по завершении.
Tip
Дополнительные рабочие процессы отладки (присоединение отладчиков, настройка интегрированной среды разработки, отладка запуска) см. в руководстве по отладке.
5. Пакет с MSIX
После того как вы будете готовы распространить приложение, вы можете упаковать его как MSIX, который предоставит удостоверение пакета вашему приложению.
Во-первых, добавьте pack:msix скрипт в ваш package.json.
"scripts": {
"tauri": "tauri",
"tauri:dev:withidentity": "...",
"pack:msix": "npm run tauri -- build && (if not exist dist mkdir dist) && copy /Y src-tauri\\target\\release\\tauri-app.exe dist\\ >nul && winapp pack .\\dist --cert .\\devcert.pfx"
}
Что делает этот скрипт:
-
npm run tauri -- build: создает серверную часть Rust в режиме релиза. -
copy ... dist\\: Помещает только файл exe в папкуdist(папкаtarget\releaseочень большая и содержит промежуточные артефакты сборки, которые не являются частью вашего приложения). -
winapp pack .\\dist --cert .\\devcert.pfx: Упаковывает и подписывает приложение как MSIX.
Создание сертификата разработки
Пакеты MSIX должны быть подписаны. Для локального тестирования создайте самозаверяющий сертификат разработки:
winapp cert generate --if-exists skip
Tip
Издатель сертификата должен соответствовать Publisher в Package.appxmanifest. Команда cert generate автоматически считывает это из манифеста.
Сборка, Настройка и Упаковка
npm run pack:msix
Tip
Команда pack автоматически использует Package.appxmanifest из текущего каталога и копирует его в целевую папку перед упаковкой. Созданный MSIX-файл будет находиться в текущем каталоге.
Установка сертификата
Прежде чем установить пакет MSIX, необходимо доверять сертификату разработки на компьютере. Выполните эту команду от имени администратора (для каждого сертификата необходимо выполнить только один раз):
winapp cert install .\devcert.pfx
Установка и запуск
Tip
Если вы использовали winapp run на шаге 4, пакет уже может быть зарегистрирован в вашей системе.
winapp unregister Сначала следует удалить регистрацию разработки, а затем установить финальный пакет.
Установите пакет, дважды щелкнув созданный .msix файл или используя PowerShell:
Add-AppxPackage .\tauri-app.msix
Tip
Имя файла MSIX включает версию и архитектуру (например, tauri-app_1.0.0.0_x64.msix). Проверьте каталог для точного имени файла. Если необходимо перепаковать после изменения кода, добавите Version в Package.appxmanifest — Windows требуется более высокий номер версии для обновления установленного пакета.
После установки вы можете запустить приложение из меню "Пуск". Приложение должно работать с учетной записью.
Tips
- После подготовки к распространению вы можете подписать MSIX с помощью сертификата подписи кода из центра сертификации, чтобы пользователи не должны устанавливать самозаверяющий сертификат.
- Microsoft Store подпишет MSIX за вас, так что нет необходимости подписывать его перед отправкой.
- Может потребоваться создать несколько пакетов MSIX, по одному для каждой поддерживаемой архитектуры (x64, Arm64).
Дальнейшие шаги
- Распространите с помощью winget: отправьте MSIX в репозиторий сообщества Windows диспетчер пакетов
-
Опубликовать в Microsoft Store: используйте
winapp storeдля отправки пакета. -
Set up CI/CD. Используйте действие
setup-WinAppCliGitHub для автоматизации упаковки в конвейере. - Ознакомьтесь с Windows API: Теперь, с удостоверением пакета, вы можете использовать Уведомления, встроенный ИИ, и другие API-интерфейсы, зависящие от удостоверения
Windows developer