Windows 安裝程式
Windows 的 Tauri 應用程式會以 Microsoft 安裝程式(.msi
檔案),使用 WiX Toolset v3 或以安裝執行檔(-setup.exe
檔案),使用 NSIS 發佈。
請注意,.msi
安裝程式只能在 Windows 上建立,因為跨平台編譯無法運作。NSIS 安裝程式的跨平台編譯目前為實驗性功能。
本指南提供關於安裝程式可用自訂選項的資訊。
建置
若要建置您的應用程式並將其打包成 Windows 安裝程式,您可以使用 Tauri CLI 並在 Windows 電腦上執行 tauri build
命令
npm run tauri build
yarn tauri build
pnpm tauri build
deno task tauri build
cargo tauri build
實驗性功能:在 Linux 和 macOS 上建置 Windows 應用程式
當使用 NSIS 時,在 Linux 和 macOS 主機上跨平台編譯 Windows 應用程式是可行的。請注意,這目前被視為高度實驗性功能,可能無法在每個系統或每個專案上運作。因此,如果本機 VM 或 CI 解決方案(例如 GitHub Actions)對您不起作用,則應僅將其用作最後手段。
由於 Tauri 官方僅支援 MSVC Windows 目標,因此設定會稍微複雜一些。
安裝 NSIS
某些 Linux 發行版在其儲存庫中提供 NSIS,例如在 Ubuntu 上,您可以透過執行此命令來安裝 NSIS
sudo apt install nsis
但在許多其他發行版上,您必須自行編譯 NSIS 或手動下載發行版二進位套件中未包含的 Stubs 和外掛程式。例如,Fedora 僅提供二進位檔,但不提供 Stubs 和外掛程式
sudo dnf in mingw64-nsiswget https://github.com/tauri-apps/binary-releases/releases/download/nsis-3/nsis-3.zipunzip nsis-3.zipsudo cp nsis-3.08/Stubs/* /usr/share/nsis/Stubs/sudo cp -r nsis-3.08/Plugins/** /usr/share/nsis/Plugins/
在 macOS 上,您需要 [Homebrew] 來安裝 NSIS
brew install nsis
安裝 LLVM 和 LLD Linker
由於預設的 Microsoft linker 僅在 Windows 上運作,因此我們也需要安裝新的 linker。為了編譯 Windows 資源檔(用於設定應用程式圖示等),我們還需要 llvm-rc
二進位檔,它是 LLVM 專案的一部分。
sudo apt install lld llvm
在 Linux 上,如果您新增了將 C/C++ 依賴項編譯為其建置腳本一部分的依賴項,則還需要安裝 clang
套件。預設的 Tauri 應用程式不應需要此套件。
brew install llvm
在 macOS 上,您還必須將 /opt/homebrew/opt/llvm/bin
新增到您的 $PATH
,如安裝輸出中建議的那樣。
安裝 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
yarn tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc
pnpm tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc
deno task tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc
cargo 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
yarn tauri build --target i686-pc-windows-msvc
pnpm tauri build --target i686-pc-windows-msvc
deno task tauri build --target i686-pc-windows-msvc
cargo 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
yarn tauri build --target aarch64-pc-windows-msvc
pnpm tauri build --target aarch64-pc-windows-msvc
deno task tauri build --target aarch64-pc-windows-msvc
cargo 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 功能
[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 執行時期版本。請參閱下表以比較這些方法
安裝方法 | 需要網際網路連線? | 額外安裝程式大小 | 注意事項 |
---|---|---|---|
downloadBootstrapper | 是 | 0MB | 預設 產生較小的安裝程式大小,但不建議透過 .msi 檔案部署到 Windows 7。 |
embedBootstrapper | 是 | ~1.8MB | 在 Windows 7 上更好地支援 .msi 安裝程式。 |
offlineInstaller | 否 | ~127MB | 嵌入 WebView2 安裝程式。建議用於離線環境。 |
fixedVersion | 否 | ~180MB | 嵌入固定 WebView2 版本。 |
skip | 否 | 0MB | ⚠️ 不建議 不會將 WebView2 安裝為 Windows 安裝程式的一部分。 |
在 Windows 10(2018 年 4 月發行版或更新版本)和 Windows 11 上,WebView2 執行時期會作為作業系統的一部分發佈。
已下載的啟動載入器
這是建置 Windows 安裝程式的預設設定。它會下載啟動載入器並執行它。需要網際網路連線,但會產生較小的安裝程式大小。如果您要透過 .msi
安裝程式發佈到 Windows 7,則不建議使用此設定。
{ "bundle": { "windows": { "webviewInstallMode": { "type": "downloadBootstrapper" } } }}
嵌入式啟動載入器
若要嵌入 WebView2 啟動載入器,請將 webviewInstallMode 設定為 embedBootstrapper
。這會使安裝程式大小增加約 1.8MB,但會提高與 Windows 7 系統的相容性。
{ "bundle": { "windows": { "webviewInstallMode": { "type": "embedBootstrapper" } } }}
離線安裝程式
若要嵌入 WebView2 啟動載入器,請將 webviewInstallMode 設定為 offlineInstaller
。這會使安裝程式大小增加約 127MB,但即使網際網路連線不可用,也允許安裝您的應用程式。
{ "bundle": { "windows": { "webviewInstallMode": { "type": "offlineInstaller" } } }}
固定版本
使用系統提供的執行時期對於安全性非常重要,因為 webview 漏洞修補程式由 Windows 管理。如果您想要控制每個應用程式上的 WebView2 發佈(無論是自行管理發行修補程式,還是在網際網路連線可能不可用的環境中發佈應用程式),Tauri 都可以為您捆綁執行時期檔案。
- 從 Microsoft 網站下載 WebView2 固定版本執行時期。在本範例中,下載的檔案名稱為
Microsoft.WebView2.FixedVersionRuntime.128.0.2739.42.x64.cab
- 將檔案解壓縮到 core 資料夾
Expand .\Microsoft.WebView2.FixedVersionRuntime.128.0.2739.42.x64.cab -F:* ./src-tauri
- 在
tauri.conf.json
中設定 WebView2 執行時期路徑
{ "bundle": { "windows": { "webviewInstallMode": { "type": "fixedRuntime", "path": "./Microsoft.WebView2.FixedVersionRuntime.98.0.1108.50.x64/" } } }}
- 執行
tauri build
以產生具有固定 WebView2 執行時期的 Windows 安裝程式。
略過安裝
您可以透過將 webviewInstallMode 設定為 skip
,從安裝程式中移除 WebView2 執行時期下載檢查。如果使用者未安裝執行時期,您的應用程式將無法運作。
如果使用者未安裝執行時期,您的應用程式將無法運作,並且不會嘗試安裝它。
{ "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
上參考它
{ "bundle": { "windows": { "wix": { "fragmentPaths": ["./windows/fragments/registry.wxs"], "componentRefs": ["MyFragmentRegistryEntries"] } } }}
請注意,ComponentGroup
、Component
、FeatureGroup
、Feature
和 Merge
元素 ID 必須分別在 tauri.conf.json
的 wix
物件上的 componentGroupRefs
、componentRefs
、featureGroupRefs
、featureRefs
和 mergeRefs
上參考,才能包含在安裝程式中。
國際化
WiX 安裝程式預設使用 en-US
語言建置。國際化 (i18n) 可以使用 tauri.bundle.windows.wix.language
屬性進行設定,定義 Tauri 應針對哪些語言建置安裝程式。您可以在 Microsoft 網站上的「語言文化」欄中找到要使用的語言名稱。
為單一語言編譯 WiX 安裝程式
若要建立以特定語言為目標的單一安裝程式,請將 language
值設定為字串
{ "bundle": { "windows": { "wix": { "language": "fr-FR" } } }}
為清單中的每種語言編譯 WiX 安裝程式
若要編譯以語言清單為目標的安裝程式,請使用陣列。將會為每種語言建立特定的安裝程式,並以語言鍵作為後綴
{ "bundle": { "windows": { "wix": { "language": ["en-US", "pt-BR", "fr-FR"] } } }}
為每種語言設定 WiX 安裝程式字串
可以為每種語言定義設定物件,以設定本地化字串
{ "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 參考以下地區設定字串:LaunchApp
、DowngradeErrorMessage
、PathEnvVarFeature
和 InstallAppFeature
。您可以定義自己的字串,並在您的自訂範本或片段中使用 "!(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 以使用該掛鉤檔案
{ "bundle": { "windows": { "nsis": { "installerHooks": "./windows/hooks.nsi" } } }}
安裝模式
預設情況下,安裝程式將僅為當前使用者安裝您的應用程式。此選項的優點是安裝程式不需要管理員權限即可執行,但應用程式安裝在 %LOCALAPPDATA%
資料夾中,而不是 C:/Program Files
。
如果您希望您的應用程式安裝在系統範圍內可用(這需要管理員權限),您可以將 installMode 設定為 perMachine
{ "bundle": { "windows": { "nsis": { "installMode": "perMachine" } } }}
或者,您可以讓使用者選擇應用程式應僅為當前使用者安裝還是系統範圍安裝,方法是將 installMode 設定為 both
。請注意,安裝程式將需要管理員權限才能執行。
有關更多資訊,請參閱 NSISInstallerMode。
國際化
NSIS 安裝程式是多語言安裝程式,這表示您始終擁有一個包含所有選定翻譯的單一安裝程式。
您可以使用 tauri.bundle.windows.nsis.languages
屬性指定要包含的語言。NSIS 支援的語言列表可在 NSIS GitHub 專案中找到。有一些 Tauri 特定的翻譯是必需的,因此如果您看到未翻譯的文字,請隨時在 Tauri 的主要儲存庫中開啟功能請求。您也可以提供自訂翻譯檔案。
預設情況下,作業系統預設語言用於決定安裝程式語言。您也可以設定安裝程式以在呈現安裝程式內容之前顯示語言選擇器
{ "bundle": { "windows": { "nsis": { "displayLanguageSelector": true } } }}
最低 Webview2 版本
如果您的應用程式需要僅在較新 Webview2 版本中提供的功能(例如自訂 URI 方案),您可以指示 Windows 安裝程式驗證目前的 Webview2 版本,如果它與目標版本不符,則執行 Webview2 啟動載入器。
{ "bundle": { "windows": { "nsis": { "minimumWebview2Version": "110.0.1531.0" } } }}
© 2025 Tauri Contributors。CC-BY / MIT