跳至主要内容

Windows 安装程序

Windows 的 Tauri 应用程序要么使用 WiX Toolset v3 作为 Microsoft 安装程序(.msi 文件)进行分发,要么从 Tauri v1.3 开始使用 NSIS 作为安装程序可执行文件(-setup.exe 文件)。Tauri CLI 捆绑了你的应用程序二进制文件和附加资源。请注意,.msi 安装程序只能在 Windows 上创建,因为跨编译尚不起作用。NSIS 安装程序的跨编译处于实验阶段,正在开发中。

本指南提供了有关安装程序可用自定义选项的信息。

若要将整个 Tauri 应用程序构建并捆绑到单个安装程序中,只需运行以下命令

npm run tauri build

它将构建你的前端,编译 Rust 二进制文件,收集所有外部二进制文件和资源,最后生成整洁的特定于平台的包和安装程序。

为 32 位或 ARM 构建

默认情况下,Tauri CLI 使用你的机器架构编译可执行文件。假设你在 64 位机器上进行开发,则 CLI 将生成 64 位应用程序。

如果你需要支持32 位机器,你可以使用 --target 标志使用不同的Rust 目标来编译应用程序

tauri build --target i686-pc-windows-msvc

默认情况下,Rust 只为你的机器目标安装工具链,所以你需要先安装 32 位 Windows 工具链:rustup target add i686-pc-windows-msvc

如果你需要为ARM64构建,你需要先安装额外的构建工具。为此,打开Visual Studio 安装程序,点击“修改”,然后在“单个组件”选项卡中安装“C++ ARM64 构建工具”。在撰写本文时,VS2022 中的确切名称是MSVC v143 - VS 2022 C++ ARM64 构建工具(最新)
现在,你可以使用 rustup target add aarch64-pc-windows-msvc 添加 rust 目标,然后使用上述方法编译你的应用程序

tauri build --target aarch64-pc-windows-msvc
信息

只有 NSIS 目标支持 ARM64 目标,因此如果你将 tauri 配置为编译所有包类型,你可能希望将上述命令更改为 tauri build --target aarch64-pc-windows-msvc --bundles nsis 以仅构建 NSIS 安装程序。

请注意,安装程序本身仍然是 x86,通过模拟在 ARM 机器上运行。该应用程序本身将是本机的 ARM64 二进制文件。

支持 Windows 7

默认情况下,Microsoft Installer (.msi) 无法在 Windows 7 上运行,因为它需要下载 WebView2 引导程序(如果未安装,则可能会失败,如果操作系统中未启用 TLS 1.2)。Tauri 包含一个嵌入 WebView2 引导程序的选项(请参阅下面的 嵌入 WebView2 引导程序 部分)。基于 NSIS 的安装程序 (-setup.exe) 也支持 Windows 7 上的 downloadBootstrapper 模式。

此外,要在 Windows 7 中使用通知 API,您需要启用 windows7-compat Cargo 功能

Cargo.toml
[dependencies]
tauri = { version = "1", features = [ "windows7-compat" ] }

FIPS 合规性

如果您的系统要求 MSI 捆绑包符合 FIPS,您可以在运行 tauri build 之前将 TAURI_FIPS_COMPLIANT 环境变量设置为 true。在 PowerShell 中,您可以像这样为当前终端会话设置它

$env:TAURI_FIPS_COMPLIANT="true"

WebView2 安装选项

默认情况下,安装程序下载 WebView2 引导程序并在未安装运行时时执行它。或者,您可以嵌入引导程序、嵌入脱机安装程序或使用固定的 WebView2 运行时版本。请参阅下表以比较这些方法

安装方法需要互联网连接吗?其他安装程序大小备注
downloadBootstrapper0MB默认
导致安装程序大小较小,但不建议通过 .msi 文件在 Windows 7 上部署。
embedBootstrapper~1.8MB更好地支持 Windows 7 上的 .msi 安装程序。
offlineInstaller~127MB嵌入 WebView2 安装程序。推荐用于脱机环境。
fixedVersion~180MB嵌入固定的 WebView2 版本。
skip0MB⚠️ 不推荐
不安装 WebView2 作为 Windows Installer 的一部分。
信息

在 Windows 10(2018 年 4 月发布或更高版本)和 Windows 11 上,WebView2 运行时作为操作系统的一部分进行分发。

已下载的引导程序

这是构建 Windows Installer 的默认设置。它下载引导程序并运行它。需要互联网连接,但会产生较小的安装程序大小。如果您要通过 .msi 安装程序分发到 Windows 7,则不建议这样做。

tauri.config.json
{
"tauri": {
"bundle": {
"windows": {
"webviewInstallMode": {
"type": "downloadBootstrapper"
}
}
}
}
}

嵌入式引导程序

要嵌入 WebView2 引导程序,请将 webviewInstallMode 设置为 embedBootstrapper。这会将安装程序大小增加约 1.8MB,但会提高与 Windows 7 系统的兼容性。

tauri.config.json
{
"tauri": {
"bundle": {
"windows": {
"webviewInstallMode": {
"type": "embedBootstrapper"
}
}
}
}
}

脱机安装程序

要嵌入 WebView2 引导程序,请将 webviewInstallMode 设置为 offlineInstaller。这会将安装程序大小增加约 127MB,但即使没有互联网连接,也可以安装您的应用程序。

tauri.config.json
{
"tauri": {
"bundle": {
"windows": {
"webviewInstallMode": {
"type": "offlineInstaller"
}
}
}
}
}

固定版本

使用系统提供的运行时非常有利于安全性,因为 Webview 漏洞补丁由 Windows 管理。如果您想在每个应用程序上控制 WebView2 分发(无论是自己管理发布补丁还是在可能没有互联网连接的环境中分发应用程序),Tauri 可以为您捆绑运行时文件。

注意

分发固定的 WebView2 运行时版本会将 Windows 安装程序增加约 180MB。

  1. Microsoft 网站 下载 WebView2 固定版本运行时。在此示例中,下载的文件名为 Microsoft.WebView2.FixedVersionRuntime.98.0.1108.50.x64.cab
  2. 将文件解压到核心文件夹
Expand .\Microsoft.WebView2.FixedVersionRuntime.98.0.1108.50.x64.cab -F:* ./src-tauri
  1. tauri.conf.json 中配置 WebView2 运行时路径
tauri.config.json
{
"tauri": {
"bundle": {
"windows": {
"webviewInstallMode": {
"type": "fixedRuntime",
"path": "./Microsoft.WebView2.FixedVersionRuntime.98.0.1108.50.x64/"
}
}
}
}
}
  1. 运行 tauri build 以生成带有固定 WebView2 运行时的 Windows 安装程序。

跳过安装

您可以通过将 webviewInstallMode 设置为 skip 从安装程序中删除 WebView2 运行时下载检查。如果用户未安装运行时,您的应用程序将无法运行。

危险

如果用户未安装运行时,您的应用程序将无法运行,并且不会尝试安装它。

tauri.config.json
{
"tauri": {
"bundle": {
"windows": {
"webviewInstallMode": {
"type": "skip"
}
}
}
}
}

自定义 WiX 安装程序模板

.msi Windows Installer 包使用 WiX Toolset v3 构建。目前,除了预定义的 配置 外,你还可以使用自定义 WiX 源代码(带有 .wxs 文件扩展名的 XML 文件)或通过 WiX 片段进行更改。

使用自定义 WiX 文件替换安装程序代码

Tauri 定义的 Windows Installer XML 被配置为适用于基于简单 webview 的应用程序的常见用例(你可以在 此处 找到它)。它使用 handlebars,以便 Tauri CLI 可以根据你的 tauri.conf.json 定义对你的安装程序进行品牌化。如果你需要一个完全不同的安装程序,可以在 tauri.bundle.windows.wix.template 上配置一个自定义模板文件。

使用 WiX 片段扩展安装程序

一个 WiX 片段 是一个容器,你可以在其中配置 WiX 提供的几乎所有内容。在此示例中,我们将定义一个写入两个注册表项的片段

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<!-- these registry entries should be installed
to the target user's machine -->
<DirectoryRef Id="TARGETDIR">
<!-- groups together the registry entries to be installed -->
<!-- Note the unique `Id` we provide here -->
<Component Id="MyFragmentRegistryEntries" Guid="*">
<!-- the registry key will be under
HKEY_CURRENT_USER\Software\MyCompany\MyApplicationName -->
<!-- Tauri uses the second portion of the
bundle identifier as the `MyCompany` name
(e.g. `tauri-apps` in `com.tauri-apps.test`) -->
<RegistryKey
Root="HKCU"
Key="Software\MyCompany\MyApplicationName"
Action="createAndRemoveOnUninstall"
>
<!-- values to persist on the registry -->
<RegistryValue
Type="integer"
Name="SomeIntegerValue"
Value="1"
KeyPath="yes"
/>
<RegistryValue Type="string" Value="Default Value" />
</RegistryKey>
</Component>
</DirectoryRef>
</Fragment>
</Wix>

将片段文件以 .wxs 扩展名保存在项目中的某个位置,并在 tauri.conf.json 中引用它

{
"tauri": {
"bundle": {
"windows": {
"wix": {
"fragmentPaths": ["./path/to/registry.wxs"],
"componentRefs": ["MyFragmentRegistryEntries"]
}
}
}
}
}

请注意,ComponentGroupComponentFeatureGroupFeatureMerge 元素 ID 必须在 tauri.conf.jsonwix 对象中分别引用 componentGroupRefscomponentRefsfeatureGroupRefsfeatureRefsmergeRefs,才能包含在安装程序中。

自定义 NSIS 安装程序模板

Tauri 定义的 NSIS 安装程序的 .nsi 脚本被配置为适用于基于简单 webview 的应用程序的常见用例(你可以在 此处 找到它)。它使用 handlebars,以便 Tauri CLI 可以根据你的 tauri.conf.json 定义对你的安装程序进行品牌化。如果你需要一个完全不同的安装程序,可以在 Tauri v1.4 及更高版本中 tauri.bundle.windows.nsis.template 上配置一个自定义模板文件。

国际化

NSIS 安装程序是一个多语言安装程序,这意味着你始终拥有包含所有选定翻译的单个安装程序。你可以使用 tauri.bundle.windows.nsis.languages 属性指定要包含哪些语言。NSIS 支持的语言列表可以在 NSIS GitHub 项目 中找到。需要一些 Tauri 特定的翻译,因此如果你看到未翻译的文本,请随时在 Tauri 的主仓库 中提出功能请求。从 v1.4 开始,你还可以提供 自定义翻译文件

默认情况下,WiX 安装程序使用 en-US 语言构建。可以使用 tauri.bundle.windows.wix.language 属性配置国际化 (i18n),定义 Tauri 应针对其构建安装程序的语言。可以在 Microsoft 网站 上的“语言-文化”列中找到要使用的语言名称。

针对单一语言编译 WiX 安装程序

若要创建针对特定语言的单个安装程序,请将 language 值设置为字符串

{
"tauri": {
"bundle": {
"windows": {
"wix": {
"language": "fr-FR"
}
}
}
}
}

针对列表中的每种语言编译 WiX 安装程序

若要编译针对语言列表的安装程序,请使用数组。将为每种语言创建一个特定安装程序,并以语言键作为后缀

{
"tauri": {
"bundle": {
"windows": {
"wix": {
"language": ["en-US", "pt-BR", "fr-FR"]
}
}
}
}
}

针对每种语言配置 WiX 安装程序

可以为每种语言定义一个配置对象来配置本地化字符串

{
"tauri": {
"bundle": {
"windows": {
"wix": {
"language": {
"en-US": null,
"pt-BR": {
"localePath": "./wix/locales/pt-BR.wxl"
}
}
}
}
}
}
}

localePath 属性定义语言文件的路径,该文件是配置语言文化的 XML

<WixLocalization
Culture="en-US"
xmlns="http://schemas.microsoft.com/wix/2006/localization"
>
<String Id="LaunchApp"> Launch MyApplicationName </String>
<String Id="DowngradeErrorMessage">
A newer version of MyApplicationName is already installed.
</String>
<String Id="PathEnvVarFeature">
Add the install location of the MyApplicationName executable to
the PATH system environment variable. This allows the
MyApplicationName executable to be called from any location.
</String>
<String Id="InstallAppFeature">
Installs MyApplicationName.
</String>
</WixLocalization>
注意

WixLocalization 元素的 Culture 字段必须与配置的语言匹配。

目前,Tauri 引用以下区域设置字符串:LaunchAppDowngradeErrorMessagePathEnvVarFeatureInstallAppFeature。你可以在自定义模板或片段中定义自己的字符串,并使用 "!(loc.TheStringId)" 引用它们。有关更多信息,请参阅 WiX 本地化文档