跳至主要內容

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 安裝程式。

請注意,安裝程式本身仍會透過模擬在 ARM 機器上執行 x86。應用程式本身會是原生 ARM64 二進位檔。

支援 Windows 7

預設情況下,Microsoft 安裝程式 (.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對於 .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 Bootstrapper,請將 webviewInstallMode 設為 offlineInstaller。這會將安裝程式的檔案大小增加約 127MB,但即使沒有網路連線,也能安裝您的應用程式。

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

固定版本

使用系統提供的執行時期非常安全,因為 Windows 會管理 Webview 漏洞修補程式。如果您想在每個應用程式中控制 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 Toolset v3 建置的。目前,除了預先定義的 組態 之外,您也可以使用自訂 WiX 原始程式碼(具有 .wxs 檔案副檔名的 XML 檔案)或透過 WiX 片段來變更它。

使用自訂 WiX 檔案取代安裝程式程式碼

Tauri 定義的 Windows 安裝程式 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 語言建置。國際化 (i18n) 可以使用 tauri.bundle.windows.wix.language 屬性設定,定義 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 本土化文件 以取得更多資訊。