Windows Installer(MSI)パッケージは1台のデバイスに簡単にインストールできますが、何百台ものデバイスにWindows Installerのサイレントインストールを行うには、適切なコマンドが必要です。幸い、Windows Installerパッケージは標準化されたmsiexecオプションのセットを共有しているため、基本的なコマンドはどのMSIでも同じです。
それを踏まえると、複数のデバイスに対して msiexec のサイレントインストールコマンドを実行できます。ただし、ことわざにもあるように、肝心なのは細部です。表示レベル、再起動の動作、ログ記録などは、MSI のサイレントインストールに影響し、成功するか失敗するかを左右します。また、失敗しても画面には何も表示されないため、何が問題だったのかを確認できる記録は、終了コードとログだけです。
では、MSIのサイレントインストールを適切に実行するにはどうすればよいのでしょうか?MSIのサイレントインストールを簡単かつ効果的に実行できるように、知っておくべきスイッチ、サイレントでのインストールとアンインストールの方法、よくある失敗の対処法などを見ていきましょう。
サイレントMSIインストール用の msiexec インストールコマンド
まず、msiexec installコマンドと、その各部分の意味を見ていきましょう。MSIパッケージをcmdでインストールするには、管理者権限でコマンドプロンプトを開き、次のmsi install cmdを実行します。
msiexec /i "C:\Installers\App.msi" /qn /norestart /l*v "C:\Logs\App-install.log"
もちろん、コマンドラインの構文がわからなければ、これは何の意味もありません。では、これをもっとわかりやすい要素に分解してみましょう。
/i はパッケージをインストールします。これはプロセスを開始する最初のコマンドです。続けてフルパスを引用符で囲んで指定してください。フォルダー名にスペースが含まれていても、コマンドが正しく動作します。
/qn は、ユーザーインターフェイスを表示せずにコマンドを実行することを示します。同等のオプションとして /quiet も使用できます。
/norestart は、パッケージ側で再起動が要求されていても、インストール完了後に Windows Installer がデバイスを再起動しないようにします。これにより、エンドユーザーのデバイスが突然再起動して作業が中断されるのを防げます。
/l*v は、指定されたパスに詳細なログを書き込みます。リンク先のフォルダーは、あらかじめ存在している必要があることに注意してください。
権限の確認を求められないよう、管理者として実行したコマンドプロンプトからコマンドを実行してください。サイレントインストールでは、管理者権限を求めるUACプロンプトを表示できません。そうしてしまうと、サイレントではなくなるからです。
PowerShellを実行している場合はどうでしょうか?これにも同様のスクリプトがありますが、いくつか重要な違いがあります。
$p = Start-Process msiexec.exe -ArgumentList '/i "C:\Installers\App.msi" /qn /norestart /l*v "C:\Logs\App-install.log"' -Wait -PassThru $p.ExitCode
この場合、-Wait パラメーターはインストールが完了するまでスクリプトを待機させ、-PassThru は終了コードを返します。
サイレントインストールと無人インストールのためのMSIスイッチ
次に、サイレントインストールと無人インストールで知っておくべきMSIスイッチを見ていきましょう。Microsoftは、その完全な一覧を標準インストーラーのコマンドラインオプションで公開しています。msiexecオプションでは大文字と小文字は区別されないため、/QN と /qn のどちらを入力しても結果は同じになることを覚えておきましょう。/quiet スイッチは、多くの人がmsiexecのサイレントインストールとしてイメージするもので、Microsoftでは /qn と同じものとして扱われています。
スイッチは、Display、Restart、Logging の3つのグループに分けられます。これらはそれぞれインストールプロセスの重要な要素であり、コマンドの実行方法を決定します。
スイッチ | グループ | 機能 |
/quiet または /qn | 表示 | ユーザーインターフェースは一切ありません |
/qn+ | 表示 | インターフェースは表示されず、インストール完了時にダイアログボックスが表示されます |
/passive | 表示 | 進行状況バーのみ、ユーザー入力は不要 |
/qb | 表示 | 進行状況バー付きの基本インターフェース |
/qb! | 表示 | Cancel ボタンを非表示にした基本インターフェース |
/norestart | 再起動 | インストール後に再起動しない |
/promptrestart | 再起動 | 再起動が必要かどうかをユーザーに確認します |
/forcerestart | 再起動 | インストール後に常に再起動する |
/l*v "path" | ログ記録 | すべての詳細ログがそのパスに書き込まれます |
/log "path" | ログ記録 | /l* と同じ(verbose と extra debug を除くすべての情報) |
多数のデバイスに設定する場合、/qn(または /quiet)と /norestart の組み合わせがよく使われ、再起動は設定ツール側で処理されます。また、ユーザーに進行状況を表示したいインストールでは、/passive も使用するとよいでしょう。
ただし、EXEインストーラーにはあるものの、msiexec には /s や /silent スイッチがないことに注意してください。EXEインストーラーにも共通の標準はないため、少し複雑になる場合があります。
サイレントインストールで MSI のプロパティと変換を設定する方法
アプリケーションパッケージをカスタマイズしたい場合は、MSIのプロパティと変換の設定方法を理解しておく必要があります。コマンドラインでこれらのカスタマイズを設定しない限り、サイレントインストールではパッケージの既定値が使われるため、何を設定すべきかを把握しておくことが重要です。
プロパティを設定する場合、これらはスイッチの後に PROPERTY=VALUE の形式で指定します。Windows Installer ではプロパティ名は大文字として扱われますが、値では大文字と小文字が保持されます。また、スペースを含む値は引用符で囲む必要があります。プロパティ名はパッケージによって異なるため、ベンダーの設定ドキュメントで確認してください。
たとえば、MSIプロパティの設定は次のようになります。
msiexec /i "C:\Installers\App.msi" /qn INSTALLDIR="D:\Apps\App" /l*v "C:\Logs\App-install.log"
次に、transform があります。transform(.mst ファイル)にはパッケージへの一連の変更が含まれており、コマンドラインに追加するのではなく直接適用できます。次のように TRANSFORMS プロパティを使って追加できます。
msiexec /i "C:\Installers\App.msi" TRANSFORMS="C:\Installers\App.mst" /qn /l*v "C:\Logs\App-install.log"
MSI をサイレントアンインストールする方法
MSI をサイレントアンインストールしたい場合も、インストールと同じくらい簡単に行えます。IT チームでは、バージョン変更のための空き確保、デバイスの整理、失敗したインストールの削除などを目的に、パッケージを削除する必要が生じることがよくあります。
/x コマンドはパッケージを削除し、表示、再起動、ログの各スイッチはインストールコマンドと同じものを受け入れます。これは元の MSI ファイルでも製品コードでも機能しますが、元の MSI がデバイス上にもうない場合は、後者のほうが役立ちます。
サイレントアンインストールコマンドは次のようになります。
msiexec /x "C:\Installers\App.msi" /qn /norestart /l*v "C:\Logs\App-uninstall.log"
または:
msiexec /x {PRODUCT-CODE-GUID} /qn /norestart /l*v "C:\Logs\App-uninstall.log"
msiexec の終了コードの見方
msiexec を使用する際は、終了コードを理解しておくことが重要です。msiexec がタスクを完了すると、スクリプトや設定ツールが読み取るための終了コードを返します。これにより、インストーラーが正常に動作したか、問題が発生したか、再起動が必要かを確認できます。Microsoft は、すべてのコードを MsiExec error messages reference に掲載しています。
msiexec の終了コードは次のとおりです。
終了コード | 内容 | 対処方法 |
0 | 成功 | なし |
3010 | 成功。完了するには再起動が必要です | 再起動をスケジュールする。成功として扱う |
1641 | 成功しました。インストーラーにより再起動が開始されました | 成功として扱います。デバイスが再起動すると想定してください |
1603 | インストール中に致命的なエラーが発生しました | 原因を確認するには、詳細ログを開いてください |
1618 | 別のインストールがすでに進行中です | 待機して再試行 |
場合によっては、スクリプトがゼロ以外のコードをすべて失敗として扱うことがあります。このような場合、アプリが正しくインストールされていても、3010 と 1641 のコードは失敗として判定されます。そのため、インストールを失敗と判断する前に成功コードを確認することをおすすめします。再起動するだけでインストールが完了する場合もあります。
サイレントMSIインストールが失敗する理由とその対処法
サイレントインストールが失敗することがあります。その場合は、原因と対処方法を把握しておくことが重要です。サイレントインストールが失敗してもユーザーには何も表示されませんが、詳しい情報を確認するには次の項目を調査できます。
1.インストールが管理者権限で実行されていなかった
サイレントインストールの実行には引き続き管理者権限が必要ですが、権限が不足していてもユーザーに確認を求めることはできません。権限不足を心配しなくて済むように、昇格されたコマンド プロンプトまたは管理者権限のある設定ツールからインストールを実行してください。
Windows 10 では、エラー 1925 は管理者権限が不足していることを示している場合があります。
2. ログフォルダが存在しない
Windows Installer はログファイル用のフォルダーを作成しません。/l*v のパスが存在しないフォルダーを指している場合、ログファイルの作成は失敗します。必ず常に存在するフォルダーにログを書き込むようにするか、必要に応じてフォルダーを作成してください。
3. 別のインストールがすでに実行中です
Windows Installer は一度に1つのインストールしか実行できません。終了コード1618が表示された場合は、インストーラーが別のアプリケーションの処理で使用中であることを意味します。幸い、その場合は別のインストールが完了するのを待ってから、再度インストールを実行すれば大丈夫です。
4. インストールで致命的なエラーが発生した
インストール中にエラーが発生した場合、終了コードだけでは原因はわかりません。この場合は、詳細を確認するために詳細ログをチェックしてください。そのため、何か問題が起きたときにログを確認できるよう、すべてのサイレントインストールコマンドに /l*v を含めておくことをおすすめします。
多数のデバイスで msiexec のサイレントインストールを実行する
会社の環境全体で複数のリモートデバイスを管理している場合、アプリケーションやアップデートをサイレントインストールする方法が必要になります。同じアプリを何百台ものデバイスに展開する必要がある場合もあるため、1台のテストマシンで動作するコマンドを作るだけでは始まりにすぎません。
msiexec のサイレントインストールは、次のようないくつかの方法で複数のデバイスに対して実行できます。
Microsoft Intune で MSI を設定する
Microsoft Intune を使用している場合は、2 つの異なる方法で MSI を設定できます。
Intune は、1 つのコマンドライン引数のみを受け付ける基幹業務 (LOB) アプリとして MSI を設定できます。さらに必要な場合は、MSI を .intunewin にラップする Win32 アプリ管理を使用することになりますファイルとして扱われ、msiexec コマンドがアプリのインストールコマンドになります。
Windows Autopilot の登録中に Win32 アプリと LOB アプリのインストールを混在させると、両方が同時に Trusted Installer サービスを使用するため、インストール失敗につながる可能性がある点に注意してください。
スクリプトやエンドポイント管理を使用してリモートでインストールを実行する
Intune を使用していない場合は、PowerShell、リモートアクセスセッション、またはエンドポイント管理ツールを通じてコマンドを実行できます。たとえば、Splashtop AEM(Autonomous Endpoint Management)では、スクリプトの実行や、管理対象エンドポイント全体にわたるパッチ管理の自動化が可能で、都合のよい時間にスケジュールしたサイレントインストールやアップデートにも対応しています。詳しい手順については、リモートコンピュータにソフトウェアをサイレントインストールする方法のガイドをご覧ください。
作業が山積みになる場所
コマンドの実行自体は簡単です。アプリの数と、それぞれに必要な作業の多さが、これを難しくしています。
各アプリにはそれぞれ専用のプロパティと変換が必要で、クリーンなデバイスでテストし、インストールが正常に動作することを確認する方法も必要です。これは新しいバージョンが出るたびに繰り返す必要があります。自動化しなければ、手作業が絶えず発生し、テストされていないパッケージがデバイス全体で障害を引き起こすおそれがあります。
Splashtop Agentic Packr は、あらゆるアプリとバージョンに対して、そのパッケージ化とテスト作業を自動化します。
Agentic Packr でテスト済みのサイレントインストールパッケージを作成
パッケージの作成、テスト、サイレントインストールは、時間のかかる手作業のプロセスである必要はありません。Splashtop Agentic Packr を使えば、インテリジェントで自動化されたパッケージ化とインストールにより、ITチームの負担を軽減できます。
Splashtop Agentic Packr は、インストーラーを分析し、インストールロジックを含むパッケージを作成し、クリーンな仮想マシンでテストする AI 搭載のアプリパッケージ化ツールです。また、各インストールが正常に完了したことを確認するための検出ルールも書き込みます。各パッケージは、公開前に IT チームがすべてを確認できるよう、QA スコアカードとログを含め、正常に機能することを確認するためのチェックとセキュリティスキャンを受けます。
新しいアップデートがリリースされるたびに、Splashtop Agentic Packr は更新済みパッケージを自動で作成できるため、ITチームは各リリースを手作業で処理する必要がなくなります。Splashtop Agentic Packr は Intune パッケージを作成して Intune に公開したり、SCCM 経由または任意の Windows デバイスで手動実行できるバンドルインストールを作成したりできるため、サイレントインストールやアップデートに柔軟に対応できるツールです。さらに、再起動のプロンプト、インストールの延期、猶予期間など、エンドユーザーに表示する内容も制御できます。
Splashtop Agentic Packr はパッケージの作成とテストを行い、Splashtop AEM はエンドポイント全体で設定とスクリプトを実行できます。
Splashtop Agentic Packr が、あらゆるアプリ向けのサイレントインストールパッケージをどのように構築、テスト、公開するかをご覧ください。



