私はかなり長い間Linuxを使ってきましたが、apt-get、aptitude、Pacman、yumなどのパッケージマネージャーのようなプログラムの依存関係をWindowsがどのように処理できるのか、常に疑問に思っていました。時々、私のパッケージマネージャーは、このライブラリのこのバージョンがこのパッケージに必要であるか、何らかの競合があることを教えてくれます。
Windowsはこれらすべてをどのように処理しますか?
私はかなり長い間Linuxを使ってきましたが、apt-get、aptitude、Pacman、yumなどのパッケージマネージャーのようなプログラムの依存関係をWindowsがどのように処理できるのか、常に疑問に思っていました。時々、私のパッケージマネージャーは、このライブラリのこのバージョンがこのパッケージに必要であるか、何らかの競合があることを教えてくれます。
Windowsはこれらすべてをどのように処理しますか?
回答:
そうではありません。コンパイラに従ってフレームワークバージョンXをインストールするように要求する.NETについて話していない限り。
それ以外はすべてエラーをスローします。運が良ければ、あなたは得るmissing dll xxxx.dll
。ただし、ほとんどのインストーラーには、ソフトウェアを実行するために必要なライブラリが含まれています。
編集4/4/2014:ちょっとOP、今日リリースされたばかりのものを見てください:
受け入れられた答えを少し拡大したかったのです。なぜなら、それは詳細が少しまばらだからです。フィリペの答えは、Windowsが実際にその戦略には言及せないんなどのコンポーネントストア(WinSxS)などの解決や軽減プログラムの依存関係の問題、グローバルアセンブリキャッシュ、MSIシステムに使用する。しかし一方で、彼はです基本的に右にアプリにカスタムライブラリを含めることは開発者の責任であると考え、インストールトランザクションをコミットする前に依存関係の存在を確認します。
Windowsは、長所と短所があるLinuxほどモジュール化されていません。マイナス面として、Windowsはよりモノリシックです。つまり、Linuxのように、リムーバブルまたはオプションのオペレーティングシステムのコンポーネントが比較的少ないことを意味します。(Windowsについては徐々に改善されていますが。)
しかし、良い面としては、開発者は、ユーザーが自分のマシンにどのライブラリを既に持っているかについて、より多くの仮定を立てることができることを意味します。これらのライブラリのさまざまなバージョンがインストールされると、コンポーネントストアに並んで保存されるため、App1がcrapDLL.dllの必要性についてbarえたり、App2が同じバージョンのcrapDLL.dllの必要性についてneedえたりすることはなくなります。時間など
Windowsでは、ライブラリのバージョン管理を提供するのはソフトウェアの作成者次第です。Windowsには、これを支援する機能がいくつかあります。
インストールプログラム(.msi)と対話するWindows InstallerおよびTrusted Installerサービス。また、バージョン管理の競合を解決するのに役立つ、分離アプリケーションおよびサイドバイサイドアセンブリと呼ばれるサポートテクノロジもあります。
.NETフレームワークアプリケーションには、グローバルアセンブリキャッシュ、厳密な名前のアセンブリ、およびコアマニフェストがあります。
Windows 8および8.1には、Windows App StoreとWindowsランタイムライブラリ(win32 APIの置き換え)があります。
編集:これらの技術のほとんどの核となるのは、アセンブリマニフェスト、バージョン番号を提供する埋め込みファイル、作成者、依存アセンブリ、およびそれらのバージョンなどのデータです。
他の答えは、パッケージ管理とOSは別々のアイデアであると正しく指摘していましたが、解決策については言及していませんでした。
Windowsのapt-getまたはyumに最も類似したパッケージ管理システムは、現在Chocolateyです。これにより、人々はパッケージ(msi、exe、powershellスクリプトなど)をインストール/アンインストールでき、それらのパッケージにはChocolateyによって自動的に解決できる依存関係に関する情報を含めることができます。
通常、パッケージには、インストールプロセスを管理するためのバイナリおよびスクリプトへのリンクが含まれています。パッケージには、バイナリまたはその他の必要なファイルを含めることもできます(依存関係は別のパッケージに含める必要があります)。Chocolateyは、MicrosoftのWeb Platform Installer、Ruby Gems、Pythonなどの外部パッケージ管理システムも使用できます。
私が理解していることから、Windowsが処理する唯一の依存関係はMicrosoft固有のライブラリです。たとえば、BlenderなどのWindowsにオープンソースプログラムをインストールすると、libavcodecおよびffmpegライブラリが独自の個別のdllファイルに含まれ、OpenShotをインストールすると、独自のコピーがインストールされます。 libavcodecは独自のディレクトリにあり、完全に異なるバージョンにすることができます。これは、残されたジャンクをクリーンアップするためにソフトウェアをアンインストールする場合は悪夢であり、また、ライブラリの冗長性により、より多くのディスクスペースを占有します。