Windows打包

用于 Windows 的 Tauri 应用程序可以使用 WiX Toolset v3 作为 Microsoft 安装程序(.msi文件)发布,或者从 Tauri v1.3 开始使用 NSIS 作为安装可执行文件(-setup.exe 文件)发布。Tauri CLI 会捆绑应用程序二进制文件和附加资源。请注意,.msi 安装程序只能在 Windows 系统上创建,因为交叉编译还不能使用。NSIS 安装程序的交叉编译正在试验和开发中。

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

要将整个 Tauri 应用程序编译并打包到一个安装程序中,只需运行以下命令即可:

  • npm
  • Yarn
  • pnpm
  • Cargo

npm run tauri build

yarn tauri build

pnpm tauri build

cargo tauri build

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

为 32 位或 ARM 构建

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

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


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 安装程序。

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

支持 Windows 7

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

此外,要在 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 运行时版本。有关这些方法的比较,请参见下表:

安装方法 需要网络连接? 额外安装大小 说明
downloadBootstrapper Yes 0MB Default
可缩小安装程序的大小,但不建议通过 .msi 文件部署 Windows 7。
embedBootstrapper Yes ~1.8MB 在 Windows 7 上更好地支持 .msi 安装程序。
offlineInstaller No ~127MB 嵌入 WebView2 安装程序。建议用于脱机环境。
fixedVersion No ~180MB 嵌入固定的 WebView2 版本。
skip No 0MB ⚠️ 不推荐
不会将 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 Runtime 版本会使 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 Runtime 下载检查。如果用户未安装运行时,应用程序将无法运行。

警告

如果用户没有安装运行时,也不会尝试安装,那么您的应用程序将无法运行。

tauri.config.json

{
  "tauri": {
    "bundle": {
      "windows": {
        "webviewInstallMode": {
          "type": "skip"
        }
      }
    }
  }
}

自定义 WiX 安装程序模板

.msi Windows 安装程序包是使用 WiX Toolset v3 构建的。目前,除预定义配置外,您还可以使用自定义 WiX 源代码(扩展名为 .wxs 文件的 XML 文件)或通过 WiX 片段对其进行更改。

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

由 Tauri 定义的 Windows Installer XML 是为简单的基于 webview 的应用程序的常见使用情况而配置的(可在此处找到)。它使用句柄,因此 Tauri CLI 可以根据你的 tauri.conf.json 定义来标记你的安装程序。如果需要完全不同的安装程序,可以在 tauri.bundle.windows.wix.template 上配置自定义模板文件。

使用 WiX Fragments扩展安装程序

WiX Fragment是一个容器,在这里可以配置 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 的应用程序的常见使用情况而配置的(可在此处找到)。它使用句柄,因此 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 语言构建。国际化(i18n)可使用 tauri.bundle.windows.wix.language 属性进行配置,该属性定义了 Tauri 应根据哪些语言构建安装程序。您可以在微软网站的语言-文化栏中找到要使用的语言名称。

为单一语言编译 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 本地化文档