実際、Windows Installerは遅いという評判があります。これに貢献するものがいくつかありますが、私はそれらを以下で説明します。しかし、最終的には、ソフトウェアをインストールおよびアンインストールするときに、1、2、または3分が本当に競合の問題であるかどうかを自問する必要があります。私はテレビチャンネルをめくるよりも時間がかかります:)
レジストリ
これが犯人ナンバーワンです。Windows Installerは、その操作にレジストリを多用します。システムが成熟し、アプリケーションをインストールおよびアンインストールし、レジストリのサイズが大きくなるか断片化すると、MSIは遅くなります。成熟したシステムにインストールするよりも、元のWindowsインストールで同じアプリケーションをインストールおよびアンインストールする方がはるかに高速です。ここでの解決策は、レジストリをクリーンでデフラグした状態に保つことです。
レジストリのクリーニングには、利用可能な多くのツールのいずれかを使用します。しかし、レジストリのデフラグについては、内部ハイブの最適化に十分なNTREGOPTを、物理ファイルのデフラグにはPageDefragを推奨できません。
レジストリでMSI操作が遅くなる理由は、MSIがそれを使用する方法に関係しています。Windowsインストーラーはレジストリを使用して、どの製品がどのコンポーネントをインストールし、どの場所にインストールされたかを追跡します。元のインストールGUIDは圧縮形式で使用されます。インストールに関するマシンごとの情報は、にありますがHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18
、ユーザーごとのデータはHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\
、ユーザーSIDのあるキーの下にあります。
これらのキーは両方とも非常に大きくすることができ、多数のサブキーと値が含まれます。インストールされた各アプリケーションの製品、コンポーネント、およびキーパスを制御します。正しいアンインストール手順を実行するには、この情報をすべて読み取って処理する必要があります。ただし、レジストリ形式では、バイナリ検索が可能なアルファベット順にキーがリストされます。しかし、値はそうではありません。これらは作成時に保存されるため、線形検索手順を実行する必要があります。これにより、アルゴリズムのパフォーマンスが低下します。
全体として、MSIはソフトウェアのインストールおよびアンインストールのためのかなり完全で正確な方法です。しかし、レジストリに依存します。システムは優れています。ずっと前に見直すべきだったのはWindowsレジストリです:)
詳細情報:
インストールまたはアンインストールの各手順でMSIが実行していることの詳細な分析については、MSIデバッグのセットアップ方法を説明するこの記事を参照してください。または、あまり重要ではないがまだ重要な情報については、これはロギングをアクティブにする方法です。