Jak system Windows obsługuje zależności programów?

23

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?

Nico
źródło
2
System Windows nie obsługuje zależności wersji. Większość instalatorów wersji tak. Jeśli jeszcze go nie znasz, sprawdź InnoSetup: jrsoftware.org/isinfo.php
paulsm4
4
Prawdopodobnie warto zauważyć, że nawet w twoich przykładach to nie Linux jako taki zarządza zależnościami - to menedżer pakietów.
GalacticCowboy
3
Jak system Windows obsługuje zależności programów? Źle, z mojego doświadczenia.
rlms

Odpowiedzi:

29

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.

Filipe YaBa Polido
źródło
6
Więc to do instalatora każdego programu należy sprawdzenie zależności? Więc jeśli instalator jest do bani, możesz w ogóle nie być w stanie korzystać z programu ..
Nico
Zapomniałem powiedzieć, nie, możesz wtedy użyć programu, ale musisz dowiedzieć się, jakiej biblioteki DLL lub frameworku potrzebuje.
Filipe YaBa Polido
9
@Filipe Więc fakt, że musisz zainstalować środowisko uruchomieniowe V C ++, jest powodem, dla którego nienawidzisz oprogramowania .NET? Również system Windows domyślnie ma już zainstalowaną platformę .NET, więc jeśli wybierzesz odpowiednią wersję, będzie ona działać od razu po wyjęciu z pudełka. A fakt, że musisz pobrać i zainstalować brakujące współdzielone obiekty, nie jest ograniczony do żadnego konkretnego oprogramowania / języka / frameworku z oczywistych powodów (możesz mieć ten sam „problem” również w * nix).
Voo
2
@FilipeYaBaPolido: Twoja nienawiść jest szczególnie niewłaściwa, ponieważ środowisko wykonawcze VC ++ 2008 jest przeznaczone dla aplikacji C ++, a nie aplikacji .Net. Oczywiście aplikacje .Net potrzebują frameworku .Net, a aplikacje C ++ potrzebują frameworka C ++ (środowisko uruchomieniowe), bardzo proste. Teraz konkretny pakiet oprogramowania może zawierać zarówno części C ++, jak i .Net, więc nie są one wyłączne.
MSalters
2
Ludzie się relaksują, nie nienawidzę .Net ani VC ++. W razie potrzeby nawet koduję w .Net / C #, to narzędzie. Ale pracuję z różnymi narzędziami i widzę różnice. Przepraszam, jeśli źle wytłumaczyłem.
Filipe YaBa Polido,
40

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.

Ryan Ries
źródło
Dzięki Ryan. Wiem, że powinienem opracować swoją odpowiedź, ale ponieważ angielski nie jest moim głównym językiem, nadal mam trudności z wyrażeniem siebie.
Filipe YaBa Polido
Dobrze opisane Powiedziałbym jednak, że staje się znacznie bardziej modułowy po stronie serwera - opcje bez rdzenia / GUI, konfiguracja oparta na rolach i funkcjach.
EricB
Przeczytałem ten artykuł dziś rano i przypomniało mi to ten post. To zabawne, choć styczne czytanie na ten temat: blogs.msdn.com/b/oldnewthing/archive/2014/04/11/10516280.aspx
Ryan Ries
9

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.

Goldfish Sandwich
źródło
6

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.

AllenSanborn
źródło
Absolutnie! Istnieje garść zewnętrznych menedżerów pakietów, które działają również w systemie Windows. Jedyne, co mogę nazwać z góry głową, to NuGet, menedżer pakietów / zależności dla programistów aplikacji wbudowany bezpośrednio w Visual Studio. To powiedziawszy, uważam, że pytanie dotyczyło bardziej sposobu, w jaki system operacyjny obsługuje pakiety, gdzie rozwiązania te dotyczą raczej sposobu, w jaki użytkownik może obsługiwać pakiety.
Goldfish Sandwich
Przepraszamy, nie podałem żadnych informacji o Chocolatey. Chocolatey opiera się na Nuget. Nuget i Nuspec to tylko pakiet „rzeczy” i specyfikacja zależności. W przypadku frameworku programowego, takiego jak .Net (ruby, węzeł, ...), zależności są zwykle składnikami oprogramowania (dll, exe, js, ...). Są to wszystkie składniki używane przez aplikację.
AllenSanborn,
W przypadku Chocolatey pakiet jest jednak zależny od całej aplikacji lub aplikacji (środowisko aplikacji takie jak Java, .net, ruby). Pakiet Nuget zawiera skrypty PowerShell (opcjonalnie również instalator), które będą zarządzać instalacją aplikacji, a plik Nuspec opisuje aplikację i jej zależności, np. Powershell, zależy od .Net. Istnieje również Boxstarter, który koncentruje poziom wyżej, opisując konfigurację maszyny i od czego zależy. Całkiem schludne rzeczy. Boxstarter wkracza w świat, do którego ludzie używają szefa kuchni lub marionetki.
AllenSanborn,
0

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.

Jeff
źródło