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


99

Windowsで複数のプログラムを一度にアンインストールまたは削除できないのはなぜですか?この背後にある理由は何ですか?内部システムを台無しにしますか?

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


9
人々が一度にすべてをアンインストールしないようにするために...たぶん。
M.ベネット14年

@ M.Bennett私もそう考えていましたが、複数のプログラムを選択する方法がないので、ユーザーはとにかくすべてを本当にアンインストールできません。
ジェロンボレン14年

5
実際には、複数のプログラムを一度に削除できます。これは、複数のプログラムのアンインストールを防止する唯一のWindowsインストーラーです。プログラムファイルを簡単に削除できます。必要に応じて、プログラムファイルのすべての内容を削除できます。これにより、これらのプログラムが効果的にアンインストールされます。
ラムハウンド14年

@Ramhound:質問者の意図を正しく理解したのはあなただけだと思われます。彼はシステムがプログラム 順番にアンインストールすることを望んでいます。ここの回答者は、彼の質問を異なって理解しました。複数のプログラムを同時にアンインストールできるかどうかです。言うまでもなく、Linuxではそれは簡単に可能です:を入力するだけですapt-get -y uninstall prog1 prog2 prog3
ニッコロM. 14年

4
@NiccoloM私の質問は、実際には同時にできない理由でした。:P
ジェロンボレン14年

回答:


101

Windowsインストーラーシステムのしくみについて読んでいる場合、.msiファイル自体がデータベースであることは言うまでもなく、トランザクションデータベースからのアイデアをプログラムのインストールとメンテナンスに適用したことは明らかです。

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

現在、MSIエンジン自体は一度に1つのプログラムのみをインストール、変更、または削除することを強制します- .msiたとえば、別のプログラムがアンインストール中に実行しようとすると、実行されないか、現在実行中のアンインストールを待機します終わる。MSI以外のインストーラーは、MSIエンジンを使用しないため、このように動作しない場合があります。しかし、この安全設計の決定により、これがおそらくappwiz.cpl、一度に1つのアンインストーラーのみを呼び出すことを要求する理由です。

CCleanerを使用すると、以前に実行されたものが終了するのを待たずにアンインストーラーを開始できます。上記の理由により、MSIインストーラーはおそらく並行して動作しません。


29
注意すべきことの1つは、Unixライクシステムのパッケージマネージャーも、ほとんど同じ理由で一度に複数のパッケージを削除しようとしないことです。複数のパッケージを削除すると、それらは次々に削除されます。おそらく、それぞれ独自のトランザクションで削除されます。
ジョーイ14年

+1すばらしい回答!留意点が1つあります。CPU-Zなどのスタンドアロンの実行可能ファイルがフォルダーにある場合は、それらを一度にアンインストール(削除)してください。
MonkeyZeus 14年

4
@Joeyこれは本当ですが、少なくとも* nixパッケージマネージャーにそれを行うように指示すれば、注文を解決できます。大きな問題は、Windowsがパッケージ管理レベルで依存関係の概念を理解していないことだと思います。
チューダー14年

4
@tudor:異なるOSでのアプリケーションの管理方法の違いにすぎないと思います。Windowsはアプリケーションを管理しますが、Unixライクでは、パッケージマネージャーはパッケージを管理します。パッケージは、ライブラリ、アプリケーション、および同様のものです。Windows そのようなことを管理できます(たとえば、Windowsコンポーネントを有効または無効にするときに内部で確実に行います)が、システム全体でサードパーティライブラリを使用することは90年代後半にはうまくいきませんでした。すべての依存関係をバンドルします。
ジョーイ14年

@Joey私はあなたの主張をしますが、ユーザー(または開発者)を非難することは、そのようなオープンな共有スペースでは遠くまで行きません。ユーザーにはアプリケーションのみが表示されますが、アプリケーションはパッケージのサブセットにすぎません。バージョンやベンダーが異なっていても、複数のライブラリを管理する必要があります。開発者にそれを管理するように要求することは、せいぜい楽観的であり、私見であり、結果として肥大化しました。Windowsストアはこれにいくつかの方法を取り入れていますが、自動マジックの依存関係解決からはまだ長い道のりであり、この点で* nixが非常に簡単になっています。
チューダー14年

19

これは、Windowsインストーラーシステムを使用するプログラムにのみ実際に適用されます。

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

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

ほとんどのアンインストーラーは、障害が発生した場合に正常にロールバックできるように、変更内容を追跡します。他のアンインストーラーによって行われたすべての変更に気付いていない場合、失敗したインストールをロールバックしようとすると、実際に事態が悪化する可能性があります。

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


9

アンインストールタスクは、複数のプログラムで共有されているファイル、またはシステムファイル\レジストリを頻繁に変更します(これを行うには管理者権限が必要な部分的な理由)。複数のアンインストールタスクが同時に実行されると、競合する可能性があります。「DLL Hell」で実行したことがある場合、それは同じです。他のプログラムまたはWindows自体が一貫性のない状態のままになる可能性があります。


これが正しい答えの大部分です。プログラム "A"が非コアWindows DLL "X"をインストールし、プログラム "B"がインストーラーでそれを必要とする場合、同様におそらくアンインストーラーの一部になります。ただし、DLL「X」をアンインストールすると、プログラム「A」が破損します。そのため、アンインストーラーは通常、共有DLLやその他のファイルを削除する必要があるかどうかを尋ねます。同時に実行すると、この種のプロンプトは適切に機能しませんでした。最後に、そしておそらくより重要なことは、誰もがWindowsレジストリを忘れたことです。Windowsレジストリは、インストーラー/アンインストーラーで頻繁に更新されるデータベースのようなコアコンポーネントです。
ダレルティーグ14年

-1

プログラムを同時にアンインストールしても、他の問題が発生する可能性がありますが、利点はほとんどありません。プログラムを順番にアンインストールするよりも高速ではありません。プログラムを解放することは、ディスクIOを伴うタスクです。IOを実行する複数のプログラムの実行は、プログラムを連続して実行するよりも高速ではありません(プログラムが2つの個別の物理ディスクにインストールされている場合を除く)。実際、 2つの競合するIOタスクによりディスクキャッシュの効率が低下し、ディスクの物理ヘッドが場所から場所へジャンプする必要があるため、遅くなる可能性があります


これは答えとしては無関係です。ディスクI / Oに関係するものはすべて、一度に多くのことを行うと速度が低下する可能性がありますが、Windowsが本当にできないのは、同時(アン)インストールだけです。また、同時(アン)インストールを実行できるようにしたいのには十分な理由があります-ユーザーが多数の操作をキューに入れて、それらをすべて一緒に実行できるようにするのがはるかに簡単になりますそれぞれが順番に完了します。また、競合の問題はSSDでは廃止されました。
アンドリューメディコ14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.