web-dev-qa-db-ja.com

Windowsで複数のプログラムを一度にアンインストールできないのはなぜですか?

Windowsでは、一度に複数のプログラムをアンインストールまたは削除することができません。この背後にある推論は何ですか?それは内部システムをめちゃくちゃにしますか?

一度に複数のプログラムをアンインストールする方法を探しているのではなく、それが選択肢にならない理由を探しています。

98
Jeroen Bollen

Windowsインストーラーシステムがどのように動作するかについて何かを読んでいれば、.msiファイル自体がデータベースであることは言うまでもなく、トランザクションデータベースからプログラムのインストールおよび保守にいくつかのアイデアを適用したことは明らかです。

データベースの設計には常に疑問があります。スピードまたは正確性/安全性が必要ですか。インストーラーがシステム構成を変更する可能性があり、事故によりシステムが動作不能になる可能性があることを考えると、安全性がスピードよりも優先されてきました。 .msiインストーラーが非常に遅い理由の1つは、ロールバックファイルが各ファイルごとに作成され、その後変更され、その後削除されるためです。 (停電やシステムクラッシュなど).

今、私はMSIエンジン自体が一度に1つのプログラムだけをインストール、修正、削除することを強制していると思います - 例えばアンインストール中に.msiを実行しようとするとアンインストールを完了します。 MSI以外のインストーラーはこのように動作しないかもしれません - 彼らはMSIエンジンを使用しないので。しかし、この安全設計上の決定により、appwiz.cplが一度に1つのアンインストーラーを呼び出すことのみを要求するのは、おそらくこのためです。

CCleanerを使用すると、以前に実行したものが完了するのを待たずにアンインストーラを起動できます。上記のため、MSIインストーラーはまだ並行して動作しない可能性があります。

101
LawrenceC

これは、 Windowsインストーラ システムを使用するプログラムにのみ当てはまります。

プログラムが独自の(アン)インストーラシステムを使用している場合、他のアンインストーラを同時に実行するのを妨げるものは何もありません。

Windowsインストーラは、複数のプログラムがシステム全体の(多くの場合共有される)設定とファイルを変更している間に競合が発生しないようにするためにインスタンス数を制限します。

ほとんどのアンインストーラは、何が変更されているのかを追跡しているため、障害が発生した場合に正常にロールバックできます。他のアンインストーラによって行われたすべての変更を認識していない場合、失敗したインストールをロールバックしようとすると実際には状況が悪くなる可能性があります。

Windowsインストーラシステムは、このような問題を回避するために、(Windows上で)すべてのアプリケーション開発者が使用できる統一システムであることを意図して作成されました。

19

アンインストール作業では、複数のプログラムで共有されているファイル、またはシステムファイル、レジストリ(多くの場合、管理者権限が必要なため)が変更されます。複数のアンインストールタスクが同時に実行された場合、それらは競合する可能性があります。あなたが "DLL Hell"で慣れたことがあるなら、それは同じでしょう。他のプログラムやWindows自体が矛盾した状態のままになる可能性があります。

9
K.A