Używam Linuksa od dłuższego czasu i zawsze zastanawiałem się, w jaki sposób Windows był w stanie obsłużyć takie zależności programów, jak apt-get , aptitude , Pacman , yum i inni menedżerowie pakietów. Czasami mój menedżer pakietów mówił mi, że ta wersja tej biblioteki jest potrzebna dla tego pakietu lub że będzie jakiś konflikt.
Jak system Windows obsługuje wszystkie te rzeczy?
Odpowiedzi:
Nie ma Chyba że mówimy o .NET, który prosi o zainstalowanie frameworka w wersji X zgodnie z kompilatorem.
Wszystko inne po prostu generuje błąd. Przy odrobinie szczęścia masz
missing dll xxxx.dll
. Chociaż większość instalatorów będzie zawierać wymagane biblioteki do uruchomienia oprogramowania.źródło
Edytuj 4/4/2014: Hej, spójrz na to, co właśnie zostało wydane dzisiaj:
http://blogs.technet.com/b/windowsserver/archive/2014/04/03/windows-management-framework-v5-preview.aspx
Chciałem tylko trochę rozszerzyć na przyjętą odpowiedź, ponieważ jest trochę rzadka w szczegółach. Odpowiedź Filipe czyni żadnej wzmianki o strategiach, że Windows faktycznie robi korzystania z kwestiami usunięcie lub zależność Program złagodzenia, jak sklep składnik (WinSxS,) globalna pamięć podręczna zestawów, system MSI, itd. Ale z drugiej strony jest on zasadniczo prawo w poczuj, że obowiązkiem programisty jest dołączenie dowolnych bibliotek niestandardowych do aplikacji i sprawdzenie istnienia zależności przed zatwierdzeniem transakcji instalacji.
Windows jest mniej modułowy niż Linux, który ma zalety i wady. Z drugiej strony, Windows jest bardziej monolityczny, co oznacza, że stosunkowo mniej elementów systemu operacyjnego można usunąć lub opcjonalnie, jak w Linuksie. (Chociaż Windows powoli się poprawia.)
Ale z drugiej strony, oznacza to, że programiści mogą poczynić o wiele więcej założeń na temat bibliotek, które użytkownik będzie już miał na swoim komputerze. Po zainstalowaniu różne wersje tych bibliotek będą przechowywane obok siebie w magazynie składników, dzięki czemu App1 nie będzie już szczekał, że potrzebuje crapDLL.dll, i App2 szczeka, że potrzebuje innej wersji crapDLL.dll w tym samym czasie czas itp.
źródło
W systemie Windows autor oprogramowania musi zapewnić wersjonowanie swoich bibliotek. Windows ma kilka ułatwień w tym zakresie.
Instalator Windows i usługi zaufanego instalatora, które współdziałają z programami instalacyjnymi (.msi). Istnieje również pewna technologia pomocnicza o nazwie Izolowane aplikacje i Zespoły Side-by-Side, które pomagają w rozwiązywaniu konfliktów wersji.
W przypadku aplikacji .NET Framework dostępna jest pamięć podręczna zestawów globalnych, zestawy o silnych nazwach i najważniejsze manifesty.
W Windows 8 i 8.1 znajduje się Windows App Store wraz z Windows Runtime Library (zamiennik API win32).
edycja: U podstaw większości tych technologii znajdują się manifesty zespołów, osadzone pliki, które zawierają numery wersji, autorzy, zespoły zależne i ich wersje oraz inne dane.
źródło
Inne odpowiedzi poprawnie wskazywały, że zarządzanie pakietami i system operacyjny to osobne pomysły, ale nie wspomniały o rozwiązaniu.
Najbardziej podobny system zarządzania pakietami do apt-get lub yum w systemie Windows to obecnie Chocolatey . Pozwala ludziom instalować / odinstalowywać pakiety (msi, exe, skrypty PowerShell), a te pakiety mogą zawierać informacje o ich zależnościach, które mogą być automatycznie rozwiązane przez Chocolatey.
Pakiet zwykle zawiera łącze do plików binarnych i skryptów do zarządzania procesem instalacji. Pakiet może również zawierać pliki binarne lub inne wymagane pliki (zależności powinny znajdować się w osobnym pakiecie). Chocolatey może również korzystać z zewnętrznych systemów zarządzania pakietami, takich jak Instalator platformy internetowej Microsoft , Ruby Gems, Python i tak dalej.
źródło
Z tego, co rozumiem, jedynymi zależnościami obsługiwanymi przez system Windows są biblioteki specyficzne dla Microsoft. Jeśli zainstalujesz, na przykład, program open source w systemie Windows, taki jak Blender, będzie on miał biblioteki libavcodec i ffmpeg w osobnych plikach dll, a jeśli następnie zainstalujesz powiedzmy, OpenShot, zainstaluje własną kopię libavcodec we własnym katalogu i mogą to być zupełnie różne wersje. Może to być koszmarem podczas odinstalowywania oprogramowania w celu usunięcia pozostawionych śmieci, a także zajmuje znacznie więcej miejsca na dysku dzięki redundancji bibliotek.
źródło