Windowsはプログラムの依存関係をどのように処理しますか?


23

私はかなり長い間Linuxを使ってきましたが、apt-getaptitudePacmanyumなどのパッケージマネージャーのようなプログラムの依存関係をWindowsがどのように処理できるのか、常に疑問に思っていました。時々、私のパッケージマネージャーは、このライブラリのこのバージョンがこのパッケージに必要であるか、何らかの競合があることを教えてくれます。

Windowsはこれらすべてをどのように処理しますか?


2
Windows バージョンの依存関係を処理しません。ほとんどのバージョンのインストーラーが行います。あなたはすでにそれに慣れていない場合は、InnoSetupをチェックアウト:jrsoftware.org/isinfo.php
paulsm4

4
あなたの例でさえ、依存関係を管理しているのはLinuxそのものではなく、パッケージマネージャーであることはおそらく注目に値します。
銀河

3
Windowsはプログラムの依存関係をどのように処理しますか?ひどく、私の経験では。
RLMS

回答:


29

そうではありません。コンパイラに従ってフレームワークバージョンXをインストールするように要求する.NETについて話していない限り。

それ以外はすべてエラーをスローします。運が良ければ、あなたは得るmissing dll xxxx.dll。ただし、ほとんどのインストーラーには、ソフトウェアを実行するために必要なライブラリが含まれています。


6
それでは、依存関係をチェックするのは各プログラムのインストーラー次第ですか?インストーラが吸うもしそうなら、あなたはすべての..でプログラムを使用することができないかもしれない
ニコ

言うのを忘れました、いいえ、それからプログラムを使用できますが、必要なDLLまたはフレームワークを把握する必要があります。
フィリペYaBaポリド14年

9
@Filipe V C ++ランタイムをインストールする必要があるという事実が、.NETソフトウェアを嫌う理由です。また、Windowsにはデフォルトで.NET Frameworkがすでにインストールされているため、適切なバージョンをターゲットにするとすぐに機能します。そして、欠落している共有オブジェクトをダウンロードしてインストールしなければならないという事実は、明らかな理由で特定のソフトウェア/言語/フレームワークに本当に限定されません(* nixでも同じ「問題」を抱えることがあります)。
Voo 14年

2
@FilipeYaBaPolido:VC ++ 2008ランタイムは.NetアプリケーションではなくC ++アプリケーション向けであるため、特に嫌いな見当違いです。明らかに、.Netアプリケーションには.Netフレームワークが必要であり、C ++アプリケーションにはC ++フレームワーク(ランタイム)が必要です。現在、特定のソフトウェアパッケージにはC ++と.Netの両方のパーツが含まれている場合があるため、2つは排他的ではありません。
MSalters

2
みんなリラックスしてください。.NetやVC ++は嫌いではありません。必要に応じて.Net / C#でコーディングすることもできます。これはツールです。しかし、私はいくつかの異なるツールで作業し、違いを確認します。間違って説明してすみません。
フィリペYaBaポリド14年

40

編集4/4/2014:ちょっとOP、今日リリースされたばかりのものを見てください:

http://blogs.technet.com/b/windowsserver/archive/2014/04/03/windows-management-framework-v5-preview.aspx


受け入れられた答えを少し拡大したかったのです。なぜなら、それは詳細が少しまばらだからです。フィリペの答えは、Windowsが実際にその戦略には言及せないなどのコンポーネントストア(WinSxS)などの解決や軽減プログラムの依存関係の問題、グローバルアセンブリキャッシュ、MSIシステムに使用する。しかし一方で、彼はです基本的に右にアプリにカスタムライブラリを含めることは開発者の責任であると考え、インストールトランザクションをコミットする前に依存関係の存在を確認します。

Windowsは、長所と短所があるLinuxほどモジュール化されていません。マイナス面として、Windowsはよりモノリシックです。つまり、Linuxのように、リムーバブルまたはオプションのオペレーティングシステムのコンポーネントが比較的少ないことを意味します。(Windowsについては徐々に改善されていますが。)

しかし、良い面としては、開発者は、ユーザーが自分のマシンにどのライブラリを既に持っているかについて、より多くの仮定を立てることができることを意味します。これらのライブラリのさまざまなバージョンがインストールされると、コンポーネントストアに並んで保存されるため、App1がcrapDLL.dllの必要性についてbarえたり、App2が同じバージョンのcrapDLL.dllの必要性についてneedえたりすることはなくなります。時間など


ライアンありがとう。私は自分の答えを詳しく述べる必要があることを知っていますが、英語は私の第一言語ではないので、私はまだ自分自身を表現するためのいくつかの困難を抱えています。
フィリペYaBaポリド14年

よく説明されています。ただし、サーバー側では、コア/ GUIなしのオプション、役割および機能ベースのセットアップなど、大幅にモジュール化されていると思います。
EricB 14年

今朝この記事を読んで、この投稿を思い出しました。それは、このトピックに接線方向の読み取りはいえ、楽しまだ:blogs.msdn.com/b/oldnewthing/archive/2014/04/11/10516280.aspx
ライアン・リース

9

Windowsでは、ライブラリのバージョン管理を提供するのはソフトウェアの作成者次第です。Windowsには、これを支援する機能がいくつかあります。

インストールプログラム(.msi)と対話するWindows InstallerおよびTrusted Installerサービス。また、バージョン管理の競合を解決するのに役立つ、分離アプリケーションおよびサイドバイサイドアセンブリと呼ばれるサポートテクノロジもあります。

.NETフレームワークアプリケーションには、グローバルアセンブリキャッシュ、厳密な名前のアセンブリ、およびコアマニフェストがあります。

Windows 8および8.1には、Windows App StoreとWindowsランタイムライブラリ(win32 APIの置き換え)があります。

編集:これらの技術のほとんどの核となるのは、アセンブリマニフェスト、バージョン番号を提供する埋め込みファイル、作成者、依存アセンブリ、およびそれらのバージョンなどのデータです。


6

他の答えは、パッケージ管理とOSは別々のアイデアであると正しく指摘していましたが、解決策については言及していませんでした。

Windowsのapt-getまたはyumに最も類似したパッケージ管理システムは、現在Chocolateyです。これにより、人々はパッケージ(msi、exe、powershellスクリプトなど)をインストール/アンインストールでき、それらのパッケージにはChocolateyによって自動的に解決できる依存関係に関する情報を含めることができます。

通常、パッケージには、インストールプロセスを管理するためのバイナリおよびスクリプトへのリンクが含まれています。パッケージには、バイナリまたはその他の必要なファイルを含めることもできます(依存関係は別のパッケージに含める必要があります)。Chocolateyは、MicrosoftのWeb Platform Installer、Ruby Gems、Pythonなどの外部パッケージ管理システムも使用できます。


絶対に!Windowsでも実行されるサードパーティのパッケージマネージャーがいくつかあります。頭に浮かぶのは、Visual Studioに直接組み込まれているアプリケーション開発者向けのパッケージ/依存関係マネージャーであるNuGetです。つまり、質問はオペレーティングシステムがパッケージを処理する方法をより探していて、これらのソリューションはユーザーがパッケージを処理する方法をより重視していると信じているということです。
金魚のサンドイッチ14年

申し訳ありませんが、Chocolateyに関する情報は含まれていません。ChocolateyはNugetをベースにしています。NugetとNuspecは、単なる「もの」のパッケージであり、依存関係の仕様です。.Net(ruby、node、...)のようなソフトウェアフレームワークの場合、依存関係は通常ソフトウェアコンポーネント(dll、exe、js、...)です。これらはすべて、アプリケーションが使用するコンポーネントです。
アレンサンボーン14年

Chocolateyの場合、パッケージはアプリケーション全体またはアプリケーションの依存関係(java、.net、rubyなどのアプリケーションフレームワーク)です。Nugetパッケージには、アプリのインストールを管理するPowerShellスクリプト(オプションでインストーラーも含まれます)が含まれ、Nuspecファイルにはアプリケーションと、Powershellが.Netに依存する依存関係などが記述されています。また、マシンの構成とそれが依存するものを記述することにより、より高いレベルに焦点を合わせるBoxstarterがあります。かなりきちんとしたもの。Boxstarterは、人々がChefまたはPuppetを使用する分野の領域に入ります。
アレンサンボーン14年

0

私が理解していることから、Windowsが処理する唯一の依存関係はMicrosoft固有のライブラリです。たとえば、BlenderなどのWindowsにオープンソースプログラムをインストールすると、libavcodecおよびffmpegライブラリが独自の個別のdllファイルに含まれ、OpenShotをインストールすると、独自のコピーがインストールされます。 libavcodecは独自のディレクトリにあり、完全に異なるバージョンにすることができます。これは、残されたジャンクをクリーンアップするためにソフトウェアをアンインストールする場合は悪夢であり、また、ライブラリの冗長性により、より多くのディスクスペースを占有します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.