web-dev-qa-db-ja.com

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

Windows XP日後、InstallShieldインストーラー(bootstrap)を含む)を含むWindowsインストーラー(.msiファイル)が使用されている5回他のインストーラーよりもアプリケーションのアンインストールに時間がかかります通常インストールについても同様です。

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

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

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

31
Chris S

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

また、適切なタイトルの記事 "Windows Installer sucks" からの抜粋:

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

これは、Windowsインストーラの動作方法ではありません。プログラムを実行して、単にインストールしてそれを実行する代わりに、システムの状態を調べ、プログラムのインストーラーであるデータベースの状態を調べ、次に、2つを調整する方法について一連の複雑すぎる計算を行います。

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

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

32
harrymc

Windowsインストーラーは確かに遅いという評判があります。これにはいくつかの原因があります。以下でそれらについて説明します。しかし、結局のところ、ソフトウェアのインストールとアンインストールの際に、1、2、3分のどちらが本当に問題なのかを自問する必要があります。 TVチャンネルをめくるよりも時間がかかります:)

レジストリ
これが犯人のナンバーワンです。 Windowsインストーラーは、その操作にレジストリを多用します。システムが成熟し、アプリケーションをインストールおよびアンインストールしたり、レジストリのサイズが大きくなったり、断片化したりすると、MSIが遅くなります。同じアプリケーションは、成熟したシステムよりも、初期のWindowsインストールの方がはるかに速くインストールおよびアンインストールできます。ここでの解決策は、レジストリをクリーンで最適化することです。

レジストリのクリーニングには、そこにある多くのツールの1つを使用してください。ただし、レジストリのデフラグについては、内部Hiveの最適化には [〜#〜] ntregopt [〜#〜] を、物理ファイルのデフラグには PageDefrag をお勧めできません。

レジストリでMSIの動作が遅くなる理由は、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デバッグのセットアップ方法を説明する この記事 を参照してください。または、それほど価値はありませんが価値ある情報については、ロギングをアクティブにする方法 this one one.

20
A Dwarf

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

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

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

コンパイル済みのMSIファイルの場合、インストールファイルを抽出するためにも時間が必要です

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

6
Stein Åsmul

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

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

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

そして、あなたが知っているように-InstallShieldは常にMSIファイルのフロントエンドであるとは限りません。また、独自の独自のインストールソリューションもあります。

3
Breakthrough