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 功能:
[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": {
"bundle": {
"windows": {
"webviewInstallMode": {
"type": "downloadBootstrapper"
}
}
}
}
}
嵌入引导程序
要嵌入 WebView2 引导程序,请将 webviewInstallMode 设置为 embedBootstrapper
。这将使安装程序的大小增加约 1.8MB,但增加了与 Windows 7 系统的兼容性。
{
"tauri": {
"bundle": {
"windows": {
"webviewInstallMode": {
"type": "embedBootstrapper"
}
}
}
}
}
离线安装程序
要嵌入 WebView2 引导程序,请将 webviewInstallMode 设置为 offlineInstaller
。这将使安装程序的大小增加约 127MB,但即使没有互联网连接,也能安装应用程序。
{
"tauri": {
"bundle": {
"windows": {
"webviewInstallMode": {
"type": "offlineInstaller"
}
}
}
}
}
固定版本
使用系统提供的运行时对安全性非常有利,因为 WebView 漏洞补丁是由 Windows 管理的。如果您想控制 WebView2 在每个应用程序上的发布(无论是自己管理发布补丁,还是在没有互联网连接的环境中发布应用程序),Tauri可为您捆绑运行时文件。
分发固定的 WebView2 Runtime 版本会使 Windows 安装程序增加约 180MB。
- 从 Microsoft 网站下载 WebView2 固定版运行时。在本例中,下载的文件名是
Microsoft.WebView2.FixedVersionRuntime.98.0.1108.50.x64.cab
- 将文件解压缩到核心文件夹:
Expand .\Microsoft.WebView2.FixedVersionRuntime.98.0.1108.50.x64.cab -F:* ./src-tauri
- 在
tauri.conf.json
中配置 WebView2 运行路径:
{
"tauri": {
"bundle": {
"windows": {
"webviewInstallMode": {
"type": "fixedRuntime",
"path": "./Microsoft.WebView2.FixedVersionRuntime.98.0.1108.50.x64/"
}
}
}
}
}
- 运行
tauri build
生成带有固定 WebView2 运行时的 Windows 安装程序。
跳过安装
您可以将 webviewInstallMode 设置为skip
,从而从安装程序中移除 WebView2 Runtime 下载检查。如果用户未安装运行时,应用程序将无法运行。
如果用户没有安装运行时,也不会尝试安装,那么您的应用程序将无法运行。
{
"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 提供的几乎所有功能。在本例中,我们将定义一个片段,用于写入两个注册表项:
在项目中保存扩展名为 .wxs
的片段文件,并在 tauri.conf.json
中引用该文件:
{
"tauri": {
"bundle": {
"windows": {
"wix": {
"fragmentPaths": ["./path/to/registry.wxs"],
"componentRefs": ["MyFragmentRegistryEntries"]
}
}
}
}
}
请注意,ComponentGroup
、Component
、FeatureGroup
、Feature
和 Merge
元素 id 必须在 tauri.conf.json
的 wix
对象中分别引用 componentGroupRefs
、componentRefs
、featureGroupRefs
、featureRefs
和 mergeRefs
,才能包含在安装程序中。
自定义 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)的路径:
Launch MyApplicationName
A newer version of MyApplicationName is already installed.
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.
Installs MyApplicationName.
WixLocalization
元素的 Culture
字段必须与配置的语言相匹配。
目前,Tauri引用了以下本地字符串: LaunchApp
、DowngradeErrorMessage
、PathEnvVarFeature
和 InstallAppFeature
。您可以定义自己的字符串,并在自定义模板或片段中使用"!(loc.TheStringId) "
引用它们。更多信息,请参阅 WiX 本地化文档。