跳到內容
Tauri

Windows 安裝程式

Windows 的 Tauri 應用程式會以 Microsoft 安裝程式(.msi 檔案),使用 WiX Toolset v3 或以安裝執行檔(-setup.exe 檔案),使用 NSIS 發佈。

請注意,.msi 安裝程式只能在 Windows 上建立,因為跨平台編譯無法運作。NSIS 安裝程式的跨平台編譯目前為實驗性功能。

本指南提供關於安裝程式可用自訂選項的資訊。

建置

若要建置您的應用程式並將其打包成 Windows 安裝程式,您可以使用 Tauri CLI 並在 Windows 電腦上執行 tauri build 命令

npm run tauri build

實驗性功能:在 Linux 和 macOS 上建置 Windows 應用程式

當使用 NSIS 時,在 Linux 和 macOS 主機上跨平台編譯 Windows 應用程式是可行的。請注意,這目前被視為高度實驗性功能,可能無法在每個系統或每個專案上運作。因此,如果本機 VM 或 CI 解決方案(例如 GitHub Actions)對您不起作用,則應僅將其用作最後手段。

由於 Tauri 官方僅支援 MSVC Windows 目標,因此設定會稍微複雜一些。

安裝 NSIS

某些 Linux 發行版在其儲存庫中提供 NSIS,例如在 Ubuntu 上,您可以透過執行此命令來安裝 NSIS

Ubuntu
sudo apt install nsis

但在許多其他發行版上,您必須自行編譯 NSIS 或手動下載發行版二進位套件中未包含的 Stubs 和外掛程式。例如,Fedora 僅提供二進位檔,但不提供 Stubs 和外掛程式

Fedora
sudo dnf in mingw64-nsis
wget https://github.com/tauri-apps/binary-releases/releases/download/nsis-3/nsis-3.zip
unzip nsis-3.zip
sudo cp nsis-3.08/Stubs/* /usr/share/nsis/Stubs/
sudo cp -r nsis-3.08/Plugins/** /usr/share/nsis/Plugins/

安裝 LLVM 和 LLD Linker

由於預設的 Microsoft linker 僅在 Windows 上運作,因此我們也需要安裝新的 linker。為了編譯 Windows 資源檔(用於設定應用程式圖示等),我們還需要 llvm-rc 二進位檔,它是 LLVM 專案的一部分。

Ubuntu
sudo apt install lld llvm

在 Linux 上,如果您新增了將 C/C++ 依賴項編譯為其建置腳本一部分的依賴項,則還需要安裝 clang 套件。預設的 Tauri 應用程式不應需要此套件。

安裝 Windows Rust 目標

假設您正在為 64 位元 Windows 系統建置

終端機視窗
rustup target add x86_64-pc-windows-msvc

安裝 cargo-xwin

我們將使用 [cargo-xwin] 作為 Tauri 的「執行器」,而不是手動設定 Windows SDK

終端機視窗
cargo install --locked cargo-xwin

預設情況下,cargo-xwin 會將 Windows SDK 下載到專案本機資料夾中。如果您有多個專案並想要共用這些檔案,您可以使用首選位置的路徑設定 XWIN_CACHE_DIR 環境變數。

建置應用程式

現在,只需將執行器和目標新增到 tauri build 命令即可,應該很簡單

npm run tauri build -- --runner cargo-xwin --target x86_64-pc-windows-msvc

然後,建置輸出將位於 target/x86_64-pc-windows-msvc/release/bundle/nsis/ 中。

為 32 位元或 ARM 建置

Tauri CLI 預設會使用您機器的架構來編譯您的可執行檔。假設您是在 64 位元機器上開發,CLI 將產生 64 位元應用程式。

如果您需要支援 32 位元機器,您可以使用不同的 Rust 目標,使用 --target 標誌來編譯您的應用程式

npm run 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 目標,然後使用上述方法編譯您的應用程式

npm run tauri build -- --target aarch64-pc-windows-msvc

請注意,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-plugin-notification = { version = "2.0.0", 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 安裝程式的一部分。

在 Windows 10(2018 年 4 月發行版或更新版本)和 Windows 11 上,WebView2 執行時期會作為作業系統的一部分發佈。

已下載的啟動載入器

這是建置 Windows 安裝程式的預設設定。它會下載啟動載入器並執行它。需要網際網路連線,但會產生較小的安裝程式大小。如果您要透過 .msi 安裝程式發佈到 Windows 7,則不建議使用此設定。

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

嵌入式啟動載入器

若要嵌入 WebView2 啟動載入器,請將 webviewInstallMode 設定為 embedBootstrapper。這會使安裝程式大小增加約 1.8MB,但會提高與 Windows 7 系統的相容性。

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

離線安裝程式

若要嵌入 WebView2 啟動載入器,請將 webviewInstallMode 設定為 offlineInstaller。這會使安裝程式大小增加約 127MB,但即使網際網路連線不可用,也允許安裝您的應用程式。

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

固定版本

使用系統提供的執行時期對於安全性非常重要,因為 webview 漏洞修補程式由 Windows 管理。如果您想要控制每個應用程式上的 WebView2 發佈(無論是自行管理發行修補程式,還是在網際網路連線可能不可用的環境中發佈應用程式),Tauri 都可以為您捆綁執行時期檔案。

  1. Microsoft 網站下載 WebView2 固定版本執行時期。在本範例中,下載的檔案名稱為 Microsoft.WebView2.FixedVersionRuntime.128.0.2739.42.x64.cab
  2. 將檔案解壓縮到 core 資料夾
終端機視窗
Expand .\Microsoft.WebView2.FixedVersionRuntime.128.0.2739.42.x64.cab -F:* ./src-tauri
  1. tauri.conf.json 中設定 WebView2 執行時期路徑
tauri.conf.json
{
"bundle": {
"windows": {
"webviewInstallMode": {
"type": "fixedRuntime",
"path": "./Microsoft.WebView2.FixedVersionRuntime.98.0.1108.50.x64/"
}
}
}
}
  1. 執行 tauri build 以產生具有固定 WebView2 執行時期的 Windows 安裝程式。

略過安裝

您可以透過將 webviewInstallMode 設定為 skip,從安裝程式中移除 WebView2 執行時期下載檢查。如果使用者未安裝執行時期,您的應用程式將無法運作。

如果使用者未安裝執行時期,您的應用程式將無法運作,並且不會嘗試安裝它。

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

自訂 WiX 安裝程式

請參閱 WiX 設定,以取得完整自訂選項列表。

安裝程式範本

.msi Windows 安裝程式套件是使用 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 副檔名儲存到 src-tauri/windows/fragments 資料夾中,並在 tauri.conf.json 上參考它

tauri.conf.json
{
"bundle": {
"windows": {
"wix": {
"fragmentPaths": ["./windows/fragments/registry.wxs"],
"componentRefs": ["MyFragmentRegistryEntries"]
}
}
}
}

請注意,ComponentGroupComponentFeatureGroupFeatureMerge 元素 ID 必須分別在 tauri.conf.jsonwix 物件上的 componentGroupRefscomponentRefsfeatureGroupRefsfeatureRefsmergeRefs 上參考,才能包含在安裝程式中。

國際化

WiX 安裝程式預設使用 en-US 語言建置。國際化 (i18n) 可以使用 tauri.bundle.windows.wix.language 屬性進行設定,定義 Tauri 應針對哪些語言建置安裝程式。您可以在 Microsoft 網站上的「語言文化」欄中找到要使用的語言名稱。

為單一語言編譯 WiX 安裝程式

若要建立以特定語言為目標的單一安裝程式,請將 language 值設定為字串

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

為清單中的每種語言編譯 WiX 安裝程式

若要編譯以語言清單為目標的安裝程式,請使用陣列。將會為每種語言建立特定的安裝程式,並以語言鍵作為後綴

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

為每種語言設定 WiX 安裝程式字串

可以為每種語言定義設定物件,以設定本地化字串

tauri.conf.json
{
"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>

目前,Tauri 參考以下地區設定字串:LaunchAppDowngradeErrorMessagePathEnvVarFeatureInstallAppFeature。您可以定義自己的字串,並在您的自訂範本或片段中使用 "!(loc.TheStringId)" 參考它們。有關更多資訊,請參閱 WiX 本地化文件

自訂 NSIS 安裝程式

請參閱 NSIS 設定,以取得完整自訂選項列表。

安裝程式範本

Tauri 定義的 NSIS 安裝程式的 .nsi 腳本經設定可用於簡單的基於 webview 的應用程式的常見用例(您可以在這裡找到它)。它使用 handlebars,以便 Tauri CLI 可以根據您的 tauri.conf.json 定義來品牌化您的安裝程式。如果您需要完全不同的安裝程式,則可以在 tauri.bundle.windows.nsis.template 上設定自訂範本檔案。

擴充安裝程式

如果您只需要擴充一些安裝步驟,您或許可以使用安裝程式掛鉤,而不是取代整個安裝程式範本。

支援的掛鉤為

  • NSIS_HOOK_PREINSTALL:在複製檔案、設定登錄檔機碼值和建立捷徑之前執行。
  • NSIS_HOOK_POSTINSTALL:在安裝程式完成複製所有檔案、設定登錄檔機碼並建立捷徑之後執行。
  • NSIS_HOOK_PREUNINSTALL:在移除任何檔案、登錄檔機碼和捷徑之前執行。
  • NSIS_HOOK_POSTUNINSTALL:在檔案、登錄檔機碼和捷徑移除之後執行。

例如,在 src-tauri/windows 資料夾中建立 hooks.nsi 檔案,並定義您需要的掛鉤

!macro NSIS_HOOK_PREINSTALL
MessageBox MB_OK "PreInstall"
!macroend
!macro NSIS_HOOK_POSTINSTALL
MessageBox MB_OK "PostInstall"
!macroend
!macro NSIS_HOOK_PREUNINSTALL
MessageBox MB_OK "PreUnInstall"
!macroend
!macro NSIS_HOOK_POSTUNINSTALL
MessageBox MB_OK "PostUninstall"
!macroend

然後您必須設定 Tauri 以使用該掛鉤檔案

tauri.conf.json
{
"bundle": {
"windows": {
"nsis": {
"installerHooks": "./windows/hooks.nsi"
}
}
}
}

安裝模式

預設情況下,安裝程式將僅為當前使用者安裝您的應用程式。此選項的優點是安裝程式不需要管理員權限即可執行,但應用程式安裝在 %LOCALAPPDATA% 資料夾中,而不是 C:/Program Files

如果您希望您的應用程式安裝在系統範圍內可用(這需要管理員權限),您可以將 installMode 設定為 perMachine

tauri.conf.json
{
"bundle": {
"windows": {
"nsis": {
"installMode": "perMachine"
}
}
}
}

或者,您可以讓使用者選擇應用程式應僅為當前使用者安裝還是系統範圍安裝,方法是將 installMode 設定為 both。請注意,安裝程式將需要管理員權限才能執行。

有關更多資訊,請參閱 NSISInstallerMode

國際化

NSIS 安裝程式是多語言安裝程式,這表示您始終擁有一個包含所有選定翻譯的單一安裝程式。

您可以使用 tauri.bundle.windows.nsis.languages 屬性指定要包含的語言。NSIS 支援的語言列表可在 NSIS GitHub 專案中找到。有一些 Tauri 特定的翻譯是必需的,因此如果您看到未翻譯的文字,請隨時在 Tauri 的主要儲存庫中開啟功能請求。您也可以提供自訂翻譯檔案

預設情況下,作業系統預設語言用於決定安裝程式語言。您也可以設定安裝程式以在呈現安裝程式內容之前顯示語言選擇器

tauri.conf.json
{
"bundle": {
"windows": {
"nsis": {
"displayLanguageSelector": true
}
}
}
}

最低 Webview2 版本

如果您的應用程式需要僅在較新 Webview2 版本中提供的功能(例如自訂 URI 方案),您可以指示 Windows 安裝程式驗證目前的 Webview2 版本,如果它與目標版本不符,則執行 Webview2 啟動載入器。

tauri.conf.json
{
"bundle": {
"windows": {
"nsis": {
"minimumWebview2Version": "110.0.1531.0"
}
}
}
}

© 2025 Tauri Contributors。CC-BY / MIT