NSIS (Nullsoft Scriptable Install System) は Tauri が Windows で既定で生成するインストーラー形式で、<productName>_<version>_x64-setup.exe という 1 つの実行ファイルになります。管理者権限なしでユーザー単位にインストールでき、多言語を 1 ファイルに同梱でき、インストール前後に独自処理を差し込めるのが特徴です。まず NSIS を選び、企業の一括展開が必要になったら MSI を追加する、という順序が現実的です。
前提条件
- Windows 上でビルドするのが基本。Linux / macOS からのクロスビルドは実験的サポート
- NSIS 本体(
makensis)は初回ビルド時に CLI が自動ダウンロードしてキャッシュします。手動インストールは不要です
プラグインや capability の権限は不要です。
1. tauri.conf.json の設定
{
"bundle": {
"targets": ["nsis"],
"licenseFile": "../LICENSE.txt",
"windows": {
"webviewInstallMode": { "type": "downloadBootstrapper", "silent": true },
"nsis": {
"installMode": "currentUser",
"languages": ["Japanese", "English"],
"displayLanguageSelector": true,
"installerIcon": "./icons/icon.ico",
"headerImage": "./nsis/header.bmp",
"sidebarImage": "./nsis/sidebar.bmp",
"startMenuFolder": "My Notes",
"compression": "lzma"
}
}
}
}
installMode の 3 種類
| 値 | インストール先 | 管理者権限 | レジストリ |
|---|---|---|---|
currentUser(既定) | %LOCALAPPDATA%\<productName> | 不要 | HKCU |
perMachine | C:\Program Files\<productName> | 必要(UAC) | HKLM |
both | ユーザーが選択 | 選択次第 | 選択次第 |
currentUser は権限のないユーザーでも導入できる反面、PC を共有する全員に配布したい用途には向きません。both にすると最初の画面で選ばせることができます。
言語
languages には NSIS の言語ファイル名を書きます(Japanese, English, SimpChinese など)。MSI と違い、全言語が 1 つのインストーラーに入ります。既定では OS の表示言語が自動で選ばれ、displayLanguageSelector: true で起動直後に選択ダイアログが出ます。文言の差し替えは customLanguageFiles に言語名をキーにした .nsh を指定します。
画像
headerImage は 150×57 px、sidebarImage は 164×314 px の BMP を用意します。PNG は使えません。installerIcon は .ico です。パスはすべて src-tauri/ からの相対パスです。
2. installerHooks でインストール前後に処理を挟む
常駐プロセスの停止や旧設定の削除は NSIS のフックマクロで行います。src-tauri/windows/hooks.nsi を作り、NSIS_HOOK_PREINSTALL / POSTINSTALL / PREUNINSTALL / POSTUNINSTALL のうち必要なものを定義します。
!macro NSIS_HOOK_PREINSTALL
; インストール前: 起動中の旧バージョンを止める
nsExec::Exec 'taskkill /IM my-notes.exe /F'
!macroend
!macro NSIS_HOOK_POSTUNINSTALL
; アンインストール後: ユーザーデータを消す
RMDir /r "$LOCALAPPDATA\jp.example.mynotes"
!macroend
{
"bundle": {
"windows": {
"nsis": { "installerHooks": "./windows/hooks.nsi" }
}
}
}
UI や流れ自体を変えたい場合は template にカスタム .nsi を指定できますが、Tauri 更新時の追従コストが高いので、フックで足りるならフックを使ってください。
動作確認
npm run tauri build -- --bundles nsis
src-tauri/target/release/bundle/nsis/my-notes_1.0.0_x64-setup.exe が生成されます。実行するとウィザードが開き、完了後にスタートメニューとデスクトップにショートカットが作られ、「アプリと機能」にも登録されます。
自動展開やテストでは NSIS 標準のサイレントスイッチ /S が使えます。
.\my-notes_1.0.0_x64-setup.exe /S
よくあるエラーと対処法
NSIS のダウンロードに失敗する
プロキシ環境では初回の makensis 取得で「Downloading ... failed」という趣旨のエラーになります。HTTPS_PROXY を設定するか、bundle.useLocalToolsDir: true にしてネットのある PC で作ったキャッシュ(target/.tauri/)をコピーしてください。
画像や言語の指定でビルドが止まる
headerImage に PNG を指定した、languages に ja-JP のようなロケール表記を書いた、といったケースでは makensis が該当ファイルを開けないという趣旨のエラーを出します。画像は BMP、言語は NSIS の言語ファイル名(Japanese)に直します。
「Windows によって PC が保護されました」と出る
未署名の -setup.exe は SmartScreen に止められます。bundle.windows.certificateThumbprint と timestampUrl でコード署名するか、signCommand で任意の署名ツールを呼びます。
OS ごとの違いと注意点
- Linux / macOS からは
--runner cargo-xwin --target x86_64-pc-windows-msvcでクロスビルドできますが実験的です。CI では Windows ランナーが安全です - ARM 版 Windows 向けは
--target aarch64-pc-windows-msvcで別途ビルドします installModeをリリース途中で変えると、レジストリの場所が違うため新旧が共存します。最初に決めたら変えないでください- MSI との比較: NSIS はユーザー単位インストール・多言語同梱・フックが得意、MSI はグループポリシー配布が得意。両方必要なら
targets: ["nsis", "msi"]で同時に作れます - 管理者権限で動作しているかをアプリ側で判定したい場合は アプリが管理者権限で動いているか確認する を参照してください
