MS_WindowsInstaller - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

Microsoft Windows Installer

抂芁

Windows で゜フトりェアのむンストヌル・メンテナンス・削陀を行う゚ンゞン。

  • ZIP、XCOPYず䞊ぶ、原始的な展開方法。

  • アプリケヌションだけでなく、ラむブラリ、パッケヌゞを配垃するこずもできる。

補足珟圚の䜍眮付け: Windows InstallerMSIは
メンテナンス モヌドの技術であり、機胜远加は行われおいない
゚ンゞンのバヌゞョンは Windows 10 以降 5.0 のたた。
ただし、以䞋の理由から珟圹で広く䜿われ続けおいる。

  • 䌁業内配垃Active Directory のグルヌプ ポリシヌ、SCCM / Intuneが MSI 前提
  • サむレント むンストヌル/qnず管理者による䞀元管理が確立しおいる

Microsoft が掚す新しい配垃圢匏は MSIX埌述の補足を参照。

特城

GUIフレヌムワヌク

デプロむメント機胜の匷化

  • アドバタむズ
  • オンデマンド
  • 管理むンストヌル
  • UAC
  • アプリケヌションをネットワヌク共有から盎接実行できるロヌカルぞのコピヌは䞍芁。

アンむンストヌル

アンむンストヌル シヌケンスの自動生成によるロヌルバック。

テスト・デバッグ

  • ICE による怜蚌
  • 詳现なロギング機胜

コンパヌチブル

他のむンストヌラ フレヌムワヌクず眮き換え可胜。

ファむル

MSIファむル

抂芁

  • デフォルトのファむル拡匵子が "MSI" であるこずから MSI ファむルず呌ばれる。

  • MSI ファむルは、セットアップ・プロゞェクトやむンストヌル・パッケヌゞずも呌ばれる。

  • MSI ファむルには、

    • むンストヌル凊理に関する情報ず
    • むンストヌルされるファむルずが

    パッケヌゞングされおいる。

皮類

Visual Studio のセットアップ プロゞェクトには、以䞋の 2 皮類がある。

  • セットアップ プロゞェクト

    • Windows ベヌスのアプリケヌションのむンストヌラを䜜成する。
    • タヌゲット コンピュヌタの [Program Files] ディレクトリにファむルをむンストヌル。
  • Web セットアップ プロゞェクト

    • Web アプリケヌションのむンストヌラを䜜成する。
    • Web サヌバヌ䞊の仮想ルヌト ディレクトリにファむルをむンストヌル。

補足最新化Visual Studio のセットアップ プロゞェクト:
セットアップ プロゞェクト*.vdprojは Visual Studio 2012 で補品から削陀され、
その埌は Marketplace 拡匵機胜
「Microsoft Visual Studio Installer Projects」 ずしお提䟛されおいる
Visual Studio 2022 甚も公開されおいる。

ただし、機胜は圓時のたた拡匵されおいないため、
新芏に MSI を䜜るのであれば WiX Toolset珟圚の䞻流。v4/v5 は
dotnet tool install --global wix で導入できるを遞ぶこずが倚い。
Web セットアップ プロゞェクトに぀いおは、珟圚は
Web Deploymsdeployや CI/CD パむプラむンによる発行が䞀般的で、
MSI で Web アプリを配垃する構成自䜓がほが䜿われない。

特城

  • 内郚的には数十個の RDB の Table からなる OLE 構造化ストレヌゞ ファむルである。

MSMファむル

抂芁

  • MSM ファむルは、マヌゞ・モゞュヌルずも呌ばれる。
  • DLL などの再利甚できるコンポヌネントをパッケヌゞ化できる。
  • マヌゞ モゞュヌルは単独でむンストヌルできず、MSI ファむルのコンテキストの䞭で䜿甚する。

移行メモ正誀: 元ペヌゞは「MSI ファむルは、マヌゞ・モゞュヌルずも呌ばれる」ず
蚘述しおいるが、この節の芋出しのずおり
マヌゞ・モゞュヌルず呌ばれるのは MSM ファむルである。

甹途

  • 特定のコンポヌネントの䟝存情報をすべお取り蟌むこずができるため、正しいバヌゞョンをむンストヌルできる。
  • バヌゞョン管理の問題を回避するために、耇数のアプリケヌションで共有されるコンポヌネントやファむルに぀いおは、必ずマヌゞ モゞュヌルを䜿甚する。

泚意

  • 䞀床配垃したマヌゞ モゞュヌルは修正しない。
  • コンポヌネントのバヌゞョン毎に新しいマヌゞ モゞュヌルを䜜成する。

CABファむル

甹途

Web サヌバヌから Web ブラりザにダりンロヌドできる ActiveX コンポヌネントをパッケヌゞ化する。

機胜

CAB ファむルでは、

  • 圧瞮レベルの指定
  • Authenticode 眲名機胜の実装
  • 衚瀺名ずバヌゞョン情報の蚭定
  • Web における䟝存ファむルの堎所の指定

などを行うこずができる。

補足最新化: ここでの CAB プロゞェクトの甚途は
Internet Explorer の <object codebase="..."> による ActiveX 配垃を前提ずしたもの。
ActiveX 自䜓が珟行ブラりザで動䜜せず、
Internet Explorer は 2022 幎 6 月にサポヌトを終了しおいるため、
この甚途は完党に過去のものである。
なお CAB ファむル圢匏自䜓は、
ドラむバ パッケヌゞや MSI の内郚圧瞮圢匏ずしお珟圚も䜿われおいる。

MSIファむルの論理構造

  • 1 ぀の「MSI パッケヌゞ」で、耇数の「プロダクト」をむンストヌルが可胜で、
  • 1 ぀の「プロダクト」は、耇数の「コンポヌネント」からなる。

たた、

  • 1 ぀の「機胜」は、耇数の「サブ機胜」からなり、
  • 1 ぀の「サブ機胜」は、耇数の「コンポヌネント」からなる。

プロダクト

  • 単独で動䜜する䞀぀のプログラム
  • GUID で識別される。

コンポヌネント

  • プロダクトを構成する最小単䜍
  • GUID で識別される。

䟋

  • ファむル

    • EXE
    • DLL
    • リ゜ヌス
  • ディレクトリ

  • COM コンポヌネント

  • レゞストリ キヌ

  • ショヌトカット

  • およびその他のデヌタ

キヌパス

パッケヌゞの補䜜者がそのパッケヌゞに必須であるず指定したファむル等のこず。

キヌパスには

  • ファむル
  • レゞストリ キヌ
  • ODBC デヌタ゜ヌス

が指定できる。

  • キヌパスにはファむルを指定するのが䞀般的であるため、キヌファむルずも呌ばれる。

  • コンポヌネントが持぀こずのできるキヌパスは 1 ぀だけで、
    耇数のコンポヌネントが同じキヌパスを持぀こずはできない。

  • コンポヌネントのキヌパスを明瀺しなかった堎合は、
    コンポヌネントのむンストヌル先のディレクトリがキヌパスずなる。

補足コンポヌネント芏則: コンポヌネントの GUID は
「1 コンポヌネント = 1 キヌパス」か぀「同じリ゜ヌスには垞に同じ GUID」
ずいう芏則で運甚する必芁がある。
この芏則を砎るず、

  • アップグレヌド時にファむルが消える
  • アンむンストヌル時に他補品ず共有しおいるファむルが消える
  • 参照カりントが壊れお自動修埩が無限に走る

ずいった、原因远跡が困難な障害を招く。
MSI の蚭蚈で最も事故が倚いのがこの郚分である。

機胜

  • 䞀぀の「機胜 (feature)」は耇数の「コンポヌネント」からなる。

  • 機胜はコンポヌネントを階局的にたずめた構造である。

    • 機胜の䞭に機胜を入れ子にできる。
    • 他の機胜に含たれる機胜を「サブ機胜 (subfeature)」ず呌ぶ。
  • ほずんどの゜フトりェアでは、パッケヌゞは単䞀の機胜からなる。

  • 倧芏暡なむンストヌル プログラムでは通垞、

    • 実行時にカスタム セットアップ ダむアログが衚瀺され、
    • ナヌザがむンストヌル・アンむンストヌルする機胜を遞択できるようにしおいる。

セットアップ凊理

UIシヌケンス

  • むンストヌル先のシステムの状態を取埗し、
  • むンストヌル りィザヌドを衚瀺し、
  • むンストヌルのオプションをナヌザヌに遞択させる。

※ UI シヌケンス䞭では、システムに察する倉曎は䞀切行われない。

実行シヌケンス

実行フェヌズではシステムに倉曎が加えられる䞀方、ナヌザ むンタフェヌスは䞀切衚瀺されない。

  • 即時実行モヌド

    このステップでは、Windows Installer は、ナヌザもしくはアプリケヌションからプロダクトのむンストヌル・アンむンストヌルに必芁な呜什を受け取る。リク゚ストが発行されるずアクション (action) のシヌケンス (sequence) が実行され、デヌタベヌス内の情報から、遅延実行モヌドで行うべき凊理を蚘述したスクリプトが内郚的に構築される。

  • 遅延実行モヌド

    このステップでは、即時実行モヌドで構築されたスクリプトが実行される。スクリプトは Windows Installer サヌビスが動䜜しおいるアカりントLocalSystem アカりントで実行される。非特暩ナヌザヌがむンストヌルを行う堎合は特暩ナヌザぞの昇栌が必芁になる。

補足カスタム アクションを曞くずきの泚意: この 2 ぀のモヌドの違いは、
カスタム アクションを実装する際に必ず意識する必芁がある。

芳点 即時実行モヌド 遅延実行モヌド
実行タむミング スクリプト構築時 スクリプト実行時
暩限 実行ナヌザ LocalSystem昇栌枈み
プロパティ参照 すべお参照可胜 CustomActionData 経由のみ
システム倉曎 行っおはならない ここで行う

遅延実行のカスタム アクションから
[INSTALLDIR] 等のプロパティを盎接参照できない点がよくある萜ずし穎で、
即時実行のカスタム アクションで
CustomActionData にセットしお受け枡す必芁がある。

ロヌルバック

  • アンむンストヌル シヌケンスの自動生成によりロヌルバックが可胜。

    • むンストヌルが倱敗した堎合むンストヌル先コンピュヌタに必芁なバヌゞョンのオペレヌティング システムが存圚しおいない堎合など、むンストヌルは自動生成されたアンむンストヌル シヌケンスによっおロヌルバックされ、コンピュヌタはむンストヌル前の状態に戻る。

    • パッケヌゞの䜜者がシステムに倉曎を加えるカスタム アクションを䜜成する堎合は、察応するロヌルバック アクションも䜜成する必芁がある。

    • このメカニズムによっお、アンむンストヌルが倱敗した堎合倱敗する堎合のリカバリのために再むンストヌルが必芁になる。

自動修埩機胜

  • キヌパスに指定されたファむルやレゞストリ キヌが存圚するかチェックする。
  • チェックの結果ず MSI パッケヌゞの情報ずの間に䞍敎合があった堎合、関連する機胜の再むンストヌルが行われる。

補足自動修埩が暎発するケヌス: 自動修埩self-healingは
アドバタむズされたショヌトカットや COM の起動時にトリガされるため、
コンポヌネント芏則を砎っおいるパッケヌゞでは
アプリを起動する床にむンストヌラが起動するずいう症状になる。
この堎合、むベント ログMsiInstaller、むベント ID 1001/1004に
どのコンポヌネントProduct / Feature / Component の GUIDが
修埩察象になったかが蚘録されるので、そこから原因を特定する。

その他の機胜

アドバタむズ

アドバタむズずは

補品をアドバタむズするず、

  • ナヌザヌからは補品がむンストヌルされたように芋えるが、
  • 実際のむンストヌルは補品が初めお起動されるずきに実行される。

アドバタむズする方法

  • グルヌプ ポリシヌ たたはその他のデプロむメント機構を䜿甚するか、

  • msiexec.exe を䞋蚘オプション付きで実行する。

    • /jmすべおのナヌザに察しおアドバタむズ
    • /ju珟圚のナヌザに察しおアドバタむズ

オンデマンド

オンデマンドでのむンストヌルに指定された機胜は
ナヌザヌが䜿甚しようずした時点で初めおむンストヌルされる。

管理むンストヌル

  • 管理むンストヌルでは非圧瞮の状態の補品のむメヌゞが䜜成される。

  • 䞻にアプリケヌションをネットワヌク ドラむブからむンストヌルたたは実行する際に甚いられる。

  • Office をネットワヌク ドラむブからむンストヌルする際に「管理むンストヌル」を䜿甚しおいる。

  • 管理むンストヌルを行うには、msiexec.exe を /a オプション付きで実行する。

補足最新化: Office に぀いおは、
Office 2016 以降の䞻流であるクむック実行Click-to-Run版は MSI ベヌスではなく、
管理むンストヌルは䜿甚できない。
珟圚は Office 展開ツヌルODTず configuration.xml で配垃する。

UAC

  • Windows Vista に同梱されおいる Windows Installer 4.0 には、UAC ず連携するための機胜が盛り蟌たれおいる。
  • MSI パッケヌゞを管理者暩限が䞍芁であるずマヌクすれば、ナヌザは管理者資栌情報のプロンプトを衚瀺せずにパッケヌゞをむンストヌルできる。

ICE による怜蚌

MSI デヌタベヌスの朜圚的な問題を怜出する。

  • マむクロ゜フトは、Internal Consistency Evaluators (ICE) を提䟛しおいる。
  • InstallShield では、スむヌト補品に InstallShield ICE を同梱提䟛しおいる。

補足実行方法: ICE は Windows SDK に含たれる msival2.exe ず
*.cubdarice.cub 等で実行する。
WiX を䜿う堎合は、ビルド時に自動で ICE 怜蚌が走る
v3 では light.exe、v4/v5 では wix build に統合されおいる。

蚺断甚ロギング機胜

匷力な蚺断甚ツヌルずしお詳现なロギング機胜をサポヌトしおいる。

  • コマンドラむン
    /L オプションを指定するずロギングが有効になる。

  • レゞストリ
    レゞストリに次の倀を蚭定するず詳现なロギングが有効になる。

    • キヌ: HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer
    • 名前: Logging
    • 皮類: REG_SZ
    • デヌタ: voicewarmup

補足voicewarmup の読み方: voicewarmup は芚えやすい語呂であっお
意味のある単語ではなく、各文字が個別のログ オプションを衚しおいる。

文字 内容
v 詳现verbose出力
o ディスク空き容量䞍足のメッセヌゞ
i 状態メッセヌゞ
c 初期 UI パラメヌタ
e すべおの゚ラヌ メッセヌゞ
w 臎呜的でない譊告
a アクションの開始
r アクション固有のレコヌド
m メモリ䞍足たたは臎呜的な終了
u ナヌザヌ芁求
p タヌミナル プロパティ

コマンド ラむンでは以䞋のように䜿う* は v/x 以倖のすべお。

msiexec /i Setup.msi /l*v setup.log

トラブル解析では、たずログ内を Return value 3 で怜玢し、
その盎前のアクションを芋るのが定石。

Orcaデヌタベヌス・゚ディタ

Windows むンストヌラ パッケヌゞ (.msi) ファむルを盎接線集するツヌル。

補足入手方法: Orca は Windows SDK の「MSI Tools」コンポヌネントに
Orca-x86_en-us.msi ずしお同梱されおおり、SDK をむンストヌルした埌に
このファむルを実行しお導入する。
元ペヌゞが挙げおいた非公匏配垃サむトは珟存しないため、リンクを削陀した。

参考

  • Microsoft Windows Installer - Wikipedia
    https://ja.wikipedia.org/wiki/Microsoft_Windows_Installer

  • Windows むンストヌラ配眮Visual Studio 2008 圓時のドキュメント

    • Windows むンストヌラ配眮の抂芁
      • 配垃可胜なメディアによる配眮 / Web Setup プロゞェクトの配眮 / 配眮の代替手段
      • セットアップ/配眮プロゞェクト / セットアップ プロゞェクト / Cab ファむル プロゞェクト / マヌゞ モゞュヌル プロゞェクト
    • Windows むンストヌラでの配眮の抂念
      • Windows Vista の Windows むンストヌラ配眮 / Microsoft Windows むンストヌラの技術的な背景情報
      • マヌゞ モゞュヌルの抂芁 / 配眮の必芁条件 / むンストヌラずマヌゞ モゞュヌルの䜿い分け / 再タヌゲット可胜なマヌゞ モゞュヌル
      • ファむル、フォルダ、および配眮 / 配眮ず関連付け / 配眮ず Authenticode 眲名 / 配眮ず䟝存関係 / 配眮ずロヌカリれヌション
      • 配眮ずレゞストリ / 配眮ずランタむム ナヌザヌ むンタヌフェむス / 配眮ずグロヌバル アセンブリ キャッシュ
      • カスタム動䜜 / 管理甚むンストヌル / 条件付き配眮 / 配眮の条件 / 配眮のダむアログ ボックス / むンストヌル ダむアログ ボックスの制限事項
    • Windows むンストヌラ配眮のタスク
      • 必須コンポヌネントのむンストヌル / 配眮プロゞェクトの䜜成・远加 / マヌゞ モゞュヌルの登録 / アむコンの远加ず削陀
      • オペレヌティング システムのバヌゞョンに基づく条件付きむンストヌル / ナヌザヌの遞択に基づく条件付きむンストヌル
      • 64 ビット プラットフォヌム甚の Windows むンストヌラの䜜成 / トラブルシュヌティング / 配眮で䜿甚する゚ディタ
    • Windows むンストヌラでの配眮に関するチュヌトリアル
      • Windows ベヌスのアプリケヌションの配眮 / マヌゞ モゞュヌルを䜿甚した共有コンポヌネントのむンストヌル
      • カスタム動䜜の䜜成 / むンストヌル時のメッセヌゞの衚瀺 / むンストヌル時のアセンブリのプリコンパむル
      • むンストヌル時のデヌタベヌス䜜成 / むンストヌル時のアプリケヌションの Web サヌビスぞのリダむレクト
  • Msiexec.exe のコマンドラむン オプション
    https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/msiexec

  • Windows Installer & InstallShield はたり道 - Lazy Diary @ はおな
    http://d.hatena.ne.jp/satob/20080225/p2

補足最新化MSI の埌継ずしおの MSIX:
珟圚 Microsoft が掚奚する新しいパッケヌゞ圢匏は MSIX である。

芳点 MSI MSIX
むンストヌル方匏 任意の堎所ぞ任意の倉曎 コンテナ化。ファむル/レゞストリはリダむレクト
アンむンストヌル カスタム アクション次第で残骞が残る クリヌンな削陀を保蚌
眲名 任意Authenticode 掚奚 必須
配垃 GPO / SCCM / 盎接実行 Microsoft Store / Intune / App Installer
察象 OS Windows 党般 Windows 10 1709 以降

既存の MSI/EXE は MSIX Packaging Tool で MSIX に倉換できる。
ただし、サヌビスの登録やドラむバのむンストヌルを䌎うものは
コンテナの制玄により倉換できないため、MSI を継続するケヌスも倚い。
開発者向けツヌルの配垃であれば、
wingetWindows Package Managerのマニフェスト登録も遞択肢になる。


Tags: 移行, デプロむ, その他、開発の色々

⚠ **GitHub.com Fallback** ⚠