MSI は Windows Installer サービスが処理するパッケージ形式で、グループポリシーや Intune での一括配布に対応しているため、企業向けアプリではほぼ必須です。Tauri は WiX Toolset v3 で MSI を生成します。WiX 本体は初回ビルド時に CLI が自動ダウンロードするので、手動インストールは不要です。ここでは bundle.windows.wix の設定と、NSIS にはない MSI 固有の制約を扱います。
前提条件
- Windows 上でビルドすること。MSI はクロスコンパイルできません
- Visual Studio Build Tools(C++ ワークロード)と WebView2 ランタイム
- 初回ビルド時のインターネット接続(WiX を取得してキャッシュするため。
bundle.useLocalToolsDir: trueでキャッシュ先をtarget/.tauri/にできる)
プラグインや capability の権限は不要です。
1. tauri.conf.json の設定
{
"bundle": {
"targets": ["msi"],
"licenseFile": "../LICENSE.txt",
"windows": {
"allowDowngrades": false,
"webviewInstallMode": { "type": "embedBootstrapper", "silent": true },
"wix": {
"language": ["ja-JP", "en-US"],
"bannerPath": "./wix/banner.bmp",
"dialogImagePath": "./wix/dialog.bmp",
"upgradeCode": "b3f1c2d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d"
}
}
}
}
targets:["msi"]にすると NSIS を作らず MSI だけ生成します。"all"なら両方licenseFile: インストーラーに使用許諾画面を追加します。MSI では.rtf推奨(.txtも可)language: 文字列なら単一言語、配列なら言語ごとに別の MSI が作られます(後述)bannerPath/dialogImagePath: 上部バナー(493×58 px)とウェルカム画面(493×312 px)の画像。BMP 形式のみupgradeCode: 同一アプリの判定に使う GUID。一度決めたら変えないでください。変えると旧バージョンが「別アプリ」扱いになり、二重インストールされますwebviewInstallMode: WebView2 未導入の PC 向けの同梱方式。downloadBootstrapper(既定、要ネット)、embedBootstrapper(約 1.8MB 追加、Windows 7 対応)、offlineInstaller(約 127MB)、fixedVersion(約 180MB、特定版を固定)、skip
日本語の MSI を作る
language に "ja-JP" を含めると、WiX 同梱の日本語ロケールで UI が日本語化されます。配列で複数指定すると言語ごとに 1 ファイルずつ、末尾に _ja-JP のようなサフィックス付きで出力されます。1 つの MSI で言語を切り替えることはできないので、多言語を 1 ファイルにしたければ NSIS を使ってください。
独自の翻訳ファイルを当てたい場合はオブジェクト形式で localePath を指定します。
{
"wix": {
"language": {
"en-US": null,
"ja-JP": { "localePath": "./wix/locales/ja-JP.wxl" }
}
}
}
2. インストーラーをカスタマイズする
レジストリ追加やサービス登録は WiX フラグメントで行います。src-tauri/windows/fragments/ に .wxs を置き、fragmentPaths と componentRefs で参照します。UI 自体を差し替える template もありますが、Tauri 更新時の追従コストが高いので、まずフラグメントで済むか検討してください。
{
"wix": {
"fragmentPaths": ["./windows/fragments/registry.wxs"],
"componentRefs": ["MyRegistryEntries"]
}
}
動作確認
npm run tauri build -- --bundles msi
src-tauri/target/release/bundle/msi/ に my-notes_1.0.0_x64_ja-JP.msi のようなファイルが生成されます。ダブルクリックでウィザードが開き、既定では C:\Program Files\<productName>\ にインストールされます。サイレントインストールとログ取得は msiexec で確認します。
msiexec /i .\my-notes_1.0.0_x64_ja-JP.msi /quiet /l*v install.log
よくあるエラーと対処法
WiX のダウンロードに失敗する
プロキシ環境や社内ネットワークでは、初回の WiX 取得がタイムアウトして「Downloading ... failed」という趣旨のエラーになります。HTTPS_PROXY 環境変数を設定するか、ネットのある PC で一度ビルドしてキャッシュディレクトリを丸ごとコピーしてください。useLocalToolsDir を有効にしておくとキャッシュがプロジェクト内に収まり、コピーが楽になります。
version にプレリリース表記があるとビルドできない
MSI のバージョンは major.minor.patch の数値 3 組しか受け付けません。tauri.conf.json の version が 1.0.0-beta.1 のようだと、MSI 生成段階でバージョン形式が不正という趣旨のエラーになります。NSIS は通るため、MSI を追加したときに初めて発覚しがちです。プレリリース番号は 1.0.0 のように落として運用してください。
同じバージョンを再インストールすると何も起きない
Windows Installer は同一バージョンの MSI を「既にインストール済み」とみなし、ファイルを更新しません。開発中に何度もビルドして試す場合は、version を上げるか、コントロールパネルから一度アンインストールしてください。逆に古いバージョンを上書きさせたくない場合は allowDowngrades: false にします。
OS ごとの違いと注意点
- MSI は Windows 専用です。macOS / Linux のビルドマシンからは NSIS(実験的)しか作れません
- 既定はマシン単位のインストール(
Program Files)で UAC の昇格が必要です。ユーザー単位で管理者権限なしにインストールさせたい場合は NSIS のinstallMode: "currentUser"が向いています - Windows 7 をサポートするなら
webviewInstallModeをembedBootstrapperにします - 未署名の MSI は SmartScreen に警告されます。
certificateThumbprintとtimestampUrlで署名するか、signCommandで外部ツールに委ねます
