Windowsインストーラー(.msiファイル)のアンインストールに他のインストーラーよりもはるかに長い時間がかかるのはなぜですか?


31

Windows XPの時代以来、InstallShieldインストーラー(MSIの単なるブートストラップ)を含むWindowsインストーラー(.msiファイル)は、他のインストーラーよりもアプリケーションのアンインストールに約5倍時間がかかりました。通常、インストールについても同様です。

なぜこれほど長い時間がかかるのですか?なぜ人々はまだインストールにMSIを使用するのですか?例えば:

VLCのアンインストール-約5秒かかります。
XYZのアンインストール-「削除する準備をしています...」を起動し、15秒遅れます。

ファイルの削除とレジストリのクリーニング(COM登録が含まれる場合があります)だけなので、なぜそんなに時間がかかるのでしょうか?


私は、これは無効にシステムがチェックポイント機能を復元します(1)場合にのみ真である、ノートにしたい、私は遅いのInnoインストーラをたくさん見てきた-それは、Windowsインストーラに固有のものではありませんこれは(巨大なインストーラです(2)単に巨大だからです)。Windowsインストーラーを(文字通り)ほんの数秒でインストールおよび削除しました。(たとえば、Bootvisはシステムに3秒でインストールされます。同じ時間でアンインストールされます。いいえ、システムも高速ではありません。)違いは、Windowsインストーラーの機能が大きいため、プログラムが大きいことです。より頻繁に使用します。
Mehrdad

@Mehrdadは、(1)システムの復元を有効にするということですか?
クリスS

確かに、タイプミス。
Mehrdad

2
MSIのアンインストールが永遠に続いていたので、私はここに来ました...実際には、ポップアップDo you want to allow the following program from an unknown publisher to make changes to this computer?がバックグラウンドに隠れていたためです。
ニコラスラウル

MSIインストールをスピードアップするための技術的な詳細についてはこの回答を参照してください。superuser.com/a/296534/11906
スタインÅsmul

回答:


32

Windowsインストーラーは最初にシステム復元ポイントを体系的に作成しますが、これは非常に遅い操作です。

また、適切な「Windows Installer sucks」というタイトルの記事からの抜粋:

以前は、インストールはソフトウェアをインストールするためのいくつかの簡単なステップを実行し、アンインストール時にその逆を実行するプログラムで構成されていました。

これは、Windowsインストーラーの仕組みではありません。プログラムを実行して単純にインストールして実行するのではなく、システムの状態を調べ、プログラムのインストーラーであるデータベースの状態を調べてから、2つの調整方法について過度に複雑な計算を行います。

インストールスクリプトを実行する代わりに、巡回セールスマンの問題を解決しているようです。これが、非常に遅い理由です。または少なくとも、それが私の印象です。

また、Windowsインストーラーはすべての情報をレジストリに保持しますが、これは世界最速のデータベースではありません。


3
dpkgパッケージデータベースに使用するものよりもおそらく高速です(確かに、dpkgはすべてを格納しません):/var/lib/dpkg/status一度インストールされたすべてのパッケージをリストするフラットテキストファイルであり、それ以来パージされていません-そして私はパージされたものが常に省略されるかどうかはわかりません。
SamB

3
dpkg言うプログレスバーが私に嘘をつかない「残り時間:0秒」を2分間、しかし...
LawrenceC

20

実際、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デバッグのセットアップ方法を説明するこの記事を参照してください。または、あまり重要ではないがまだ重要な情報については、これはロギングをアクティブにする方法です。


4
また、私が知る限り、MSIはすべての処理にトランザクションを使用するため、操作が失敗した場合は常に適切なロールバックを実行できます。これはおそらく速度にも寄与しませんが、データの整合性には非常に重要です。(NSISインストーラーが失敗した後、クリーンアップする必要がある頻度のカウントを停止しました-.-)
Joey

今、私はOpenOfficeをインストールしていますが、すでに1時間近くあります;)
Quiark

非常に有益です。私はmsiログで「復元ポイントを作成できません」というエラーを頻繁に(復元ポイントの見積もりに達しましたか?)受け取るため、復元ポイントを作成してもインストール時間が妨げられることはありません。とにかく、私のインストール時間はまだ遅く、値の検索があなたが言うほど遅いなら、私はMicrosoftの側でレジストリのバイナリ仕様で追加のリーフ/ノード情報の追加の実装を提供する理由はないと思うバイナリ検索を補完します。
chaz

>しかし、最終的には、ソフトウェアをインストールおよびアンインストールするときに、1、2、または3分が本当に競合の問題であるかどうかを自問する必要があります。はい。
アレクセイアヴェルチェンコ

6

Windowsインストーラーには、企業での展開に多くの大きな利点があります。そのいくつかをここで説明しました:https : //serverfault.com/a/274609/20599

Windowsインストーラーセッションの遅延の多くは、ロールバック機能が原因です。まず、インストールまたはアンインストールの前に復元ポイントを作成します(システムの復元が無効になっていない場合)。その後、アンインストールとインストールの両方で影響を受けるすべてのファイルをバックアップし、エラーが発生した場合にシステムを元の状態に復元できるようにします。

別の要因は、MSIのすべてのコンポーネントがレジストリに登録されることです。これにはオーバーヘッドが伴います

コンパイルされたMSIファイルの場合、インストールファイル抽出するのに時間が必要です

MSIインストールを高速化するための技術的な詳細については、この回答を参照してください。


3

Windowsインストーラーは、オペレーティングシステムの統合、セキュリティポリシー、無人インストールなど、多くの理由でよく使用されます。

私が考えることができる最も一般的な理由は、無人インストールとネットワーク配布です。大企業は、ネットワークドライブに.MSIファイルを配置し、インストールプロセスを自動化するためにリモートマシンでバッチファイル(または配布ウィザードアプリケーション)を呼び出すだけで、アプリケーションを簡単に配布できます。

.MSIファイル以外にも他のオプションがありますが、他の多くのインストーラーにはないWindowsのほとんどのバージョンと統合するいくつかの独自の機能があります。

ご存知のとおり、InstallShieldは常にMSIファイルのフロントエンドではありません。また、独自の独自のインストールソリューションもあります。


1
問題は、純粋な.exeインストーラーと比較して、MSIが何かをするのになぜそんなに時間がかかるのかということでした。
grawity

5
質問から...「そしてなぜ人々はまだインストールにMSIを使用しているのですか?」
ブレークスルー

@grawity:技術的には、msiインストーラーもexeにパッケージ化できますが、おそらくそれは髪を分割しているでしょう。
music2myear
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.