跳到主要内容

Windows 安装程序

Tauri 的 Windows 应用可以通过使用 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 Installer,点击“修改”,然后在“单个组件”选项卡中安装“C++ ARM64 构建工具”。在撰写本文时,VS2022 中的准确名称是MSVC v143 - VS 2022 C++ ARM64 build tools (Latest)
现在,你可以使用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 安装程序 (.msi) 不支持 Windows 7,因为它需要下载 WebView2 引导程序(如果未安装),这可能会在操作系统中未启用 TLS 1.2 时失败。Tauri 包含一个嵌入 WebView2 引导程序的选项(请参阅下面的 嵌入 WebView2 引导程序 部分)。基于 NSIS 的安装程序 (-setup.exe) 也支持 Windows 7 上的 downloadBootstrapper 模式。

此外,要在 Windows 7 中使用 Notification 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.msi 安装程序在 Windows 7 上的支持更好。
offlineInstaller约 127MB嵌入 WebView2 安装程序。推荐用于脱机环境。
fixedVersion约 180MB嵌入固定 WebView2 版本。
skip0MB⚠️ 不推荐
不将 WebView2 作为 Windows 安装程序的一部分安装。
信息

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

下载的引导程序

这是构建 Windows 安装程序的默认设置。它会下载引导程序并运行它。需要互联网连接,但会使安装程序大小更小。如果你要通过 .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 安装包是使用WiX 工具集 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"]
}
}
}
}
}

请注意,必须在 tauri.conf.jsonwix 对象中分别引用 ComponentGroupComponentFeatureGroupFeatureMerge 元素 ID,其对应字段为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 本地化文档