Wie geht Windows mit Programmabhängigkeiten um?

23

Ich habe Linux eine ganze Weile benutzt und mich immer gefragt, wie Windows mit den Programmabhängigkeiten wie apt-get , aptitude , Pacman , yum und anderen Paketmanagern umgehen kann . Manchmal sagte mir mein Paketmanager, dass diese Version dieser Bibliothek für dieses Paket benötigt würde oder dass es einen Konflikt geben würde.

Wie geht Windows mit all diesen Dingen um?

Nico
quelle
2
Windows verarbeitet keine Versionsabhängigkeiten. Die meisten Versionsinstallateure tun dies. Wenn Sie noch nicht mit InnoSetup vertraut sind, besuchen Sie
paulsm4
4
Es ist wahrscheinlich erwähnenswert, dass selbst in Ihren Beispielen nicht Linux als solches die Abhängigkeiten verwaltet - es ist der Paketmanager.
GalacticCowboy
3
Wie geht Windows mit Programmabhängigkeiten um? Nach meiner Erfahrung schlecht.
rlms

Antworten:

29

Das tut es nicht. Es sei denn, es handelt sich um .NET, bei dem Sie aufgefordert werden, die Framework-Version X gemäß dem Compiler zu installieren.

Alles andere wirft nur einen Fehler. Mit etwas Glück bekommen Sie missing dll xxxx.dll. Bei den meisten Installationsprogrammen sind jedoch die erforderlichen Bibliotheken enthalten, um die Software auszuführen.

Filipe YaBa Polido
quelle
6
Es liegt also am Installer jedes Programms, nach den Abhängigkeiten zu suchen? Also, wenn der Installer saugt, können Sie das Programm möglicherweise überhaupt nicht verwenden.
Nico
Vergessen zu sagen, nein, Sie können dann das Programm verwenden, aber Sie müssen herausfinden, welche DLL oder welches Framework es benötigt.
Filipe YaBa Polido
9
@Filipe Die Tatsache, dass Sie die V C ++ - Laufzeit installieren müssen, ist der Grund, warum Sie .NET-Software hassen? Außerdem ist in Windows standardmäßig bereits ein .NET-Framework installiert. Wenn Sie also auf die richtige Version abzielen, funktioniert dies sofort. Und die Tatsache, dass Sie fehlende freigegebene Objekte herunterladen und installieren müssen, ist aus offensichtlichen Gründen nicht auf eine bestimmte Software / Sprache / ein bestimmtes Framework beschränkt (Sie können das gleiche "Problem" auch in * nix haben).
Voo
2
@FilipeYaBaPolido: Ihr Hass ist besonders fehl am Platz, da die VC ++ 2008-Laufzeit für C ++ -Anwendungen und nicht für .NET-Anwendungen vorgesehen ist. Offensichtlich benötigen .Net-Anwendungen das .Net-Framework und C ++ - Anwendungen das C ++ - Framework (Laufzeit), eigentlich ganz einfach. Jetzt kann ein bestimmtes Softwarepaket sowohl C ++ - als auch .Net-Teile enthalten, sodass die beiden nicht exklusiv sind.
MSalters
2
Leute entspannen sich, ich hasse .Net oder VC ++ nicht. Ich codiere sogar in .Net / C #, wenn nötig, es ist ein Werkzeug. Aber ich arbeite mit verschiedenen Werkzeugen und sehe die Unterschiede. Entschuldigung, wenn ich es falsch erklärt habe.
Filipe YaBa Polido
40

Edit 04.04.2014: Hey OP, schau dir an, was gerade heute veröffentlicht wurde:

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


Ich wollte nur die akzeptierte Antwort etwas näher erläutern, da es ein wenig spärlich um Details geht. In der Antwort von Filipe wird nicht erwähnt, mit welchen Strategien Windows tatsächlich Probleme mit der Programmabhängigkeit löst oder mindert, wie z. B. der Komponentenspeicher (WinSxS), der globale Assemblycache, das MSI-System usw. Auf der anderen Seite hat er im Grunde recht Es liegt in der Verantwortung des Entwicklers, benutzerdefinierte Bibliotheken in die App einzubeziehen und das Vorhandensein von Abhängigkeiten zu überprüfen, bevor Sie die Installationstransaktion ausführen.

Windows ist weniger modular als Linux, das positive und negative Aspekte aufweist. Auf der anderen Seite ist Windows monolithischer, was bedeutet, dass vergleichsweise weniger Komponenten des Betriebssystems austauschbar oder optional sind, wie in Linux. (Obwohl Windows langsam besser wird.)

Auf der anderen Seite bedeutet dies, dass Entwickler viel mehr Annahmen darüber treffen können, welche Bibliotheken ein Benutzer bereits auf seinem Computer hat. Und verschiedene Versionen dieser Bibliotheken werden nach der Installation nebeneinander im Komponentenspeicher gespeichert, sodass App1 nicht mehr über die Notwendigkeit von crapDLL.dll und App2 über die Notwendigkeit einer anderen Version von crapDLL.dll bellt Zeit usw.

Ryan Ries
quelle
Vielen Dank, Ryan. Ich weiß, dass ich meine Antwort ausarbeiten sollte, aber da Englisch nicht meine Hauptsprache ist, habe ich immer noch einige Schwierigkeiten, mich auszudrücken.
Filipe YaBa Polido
Gut beschrieben. Ich würde jedoch sagen, dass es auf der Serverseite wesentlich modularer wird - Core / GUI-freie Optionen, rollen- und funktionsbasiertes Setup.
EricB
Ich habe diesen Artikel heute Morgen gelesen und er hat mich an diesen Beitrag erinnert. Es ist eine unterhaltsame, wenn auch tangentiale Lektüre zu diesem Thema: blogs.msdn.com/b/oldnewthing/archive/2014/04/11/10516280.aspx
Ryan Ries
9

In Windows ist es Sache des Softwareautors, die Versionsverwaltung für seine Bibliotheken bereitzustellen. Windows bietet hierfür einige Möglichkeiten.

Der Windows Installer- und der Trusted Installer-Dienst, die mit Installationsprogrammen (.msi) interagieren. Es gibt auch eine unterstützende Technologie namens "Isolierte Anwendungen" und "Side-by-Side-Assemblys", mit deren Hilfe Versionskonflikte behoben werden können.

Für .NET Framework-Anwendungen gibt es den globalen Assemblycache, Assemblys mit starkem Namen und die zentralen Manifeste.

In Windows 8 und 8.1 gibt es den Windows App Store zusammen mit der Windows Runtime Library (Win32-API-Ersatz).

Bearbeiten: Der Kern der meisten dieser Technologien sind Assembly-Manifeste, eingebettete Dateien, die unter anderem Versionsnummern, Autoren, abhängige Assemblys und deren Versionen enthalten.

Goldfisch-Sandwich
quelle
6

In den anderen Antworten wurde richtig darauf hingewiesen, dass Paketverwaltung und Betriebssystem getrennte Ideen sind, ohne jedoch eine Lösung zu nennen.

Das Paketverwaltungssystem, das apt-get oder yum unter Windows am ähnlichsten ist, ist derzeit Chocolatey . Es ermöglicht Benutzern das Installieren / Deinstallieren von Paketen (msi, exe, Powershell-Skripte). Diese Pakete können Informationen zu ihren Abhängigkeiten enthalten, die von Chocolatey automatisch aufgelöst werden können.

Das Paket enthält normalerweise einen Link zu den Binärdateien und Skripten, um den Installationsprozess zu verwalten. Das Paket kann auch die Binärdateien oder andere erforderliche Dateien enthalten (Abhängigkeiten sollten sich in einem separaten Paket befinden). Chocolatey kann auch externe Paketverwaltungssysteme wie Microsoft Web Platform Installer , Ruby Gems, Python usw. verwenden.

AllenSanborn
quelle
Absolut! Es gibt eine Handvoll Paketmanager von Drittanbietern, die auch unter Windows ausgeführt werden. Das einzige, was ich auf den Kopf stellen kann, ist NuGet, ein Paket- / Abhängigkeits-Manager für Anwendungsentwickler, der direkt in Visual Studio integriert ist. Ich glaube jedoch, dass die Frage mehr danach ging, wie das Betriebssystem mit Paketen umgeht, während diese Lösungen eher darauf abzielen, wie ein Benutzer mit Paketen umgeht.
Goldfish Sandwich
Tut mir leid, ich habe keine Informationen zu Chocolatey angegeben. Chocolatey basiert auf Nuget. Nuget und Nuspec sind nur ein Paket von 'Sachen' und eine Spezifikation von Abhängigkeiten. Bei einem Software-Framework wie .Net (Ruby, Node, ...) sind die Abhängigkeiten normalerweise Software-Komponenten (dll, exe, js, ...). Dies sind alle Komponenten, die eine Anwendung verwendet.
AllenSanborn
In Chocolateys Fall ist das Paket jedoch eine vollständige Anwendung oder Anwendungsabhängigkeit (App-Framework wie Java, .NET, Ruby). Das Nuget-Paket enthält PowerShell-Skripte (optional auch das Installationsprogramm), mit denen die Installation der App verwaltet wird. Die Nuspec-Datei beschreibt die Anwendung und die Abhängigkeiten, die sie aufweist, z. B. hängt Powershell von .Net ab. Es gibt auch Boxstarter, die eine höhere Ebene fokussieren, indem sie die Konfiguration einer Maschine beschreiben und wovon sie abhängt. Ziemlich ordentliches Zeug. Boxstarter betritt das Reich dessen, wofür die Leute Chefkoch oder Puppentheater benutzen.
AllenSanborn
0

Soweit ich weiß, sind die einzigen Abhängigkeiten, die von Windows behandelt werden, Microsoft-spezifische Bibliotheken. Wenn Sie beispielsweise ein Open-Source-Programm wie Blender unter Windows installieren, werden die Bibliotheken libavcodec und ffmpeg in separaten DLL-Dateien gespeichert. Wenn Sie dann beispielsweise OpenShot installieren, wird eine eigene Kopie des Programms installiert libavcodec in einem eigenen Verzeichnis, und sie können völlig verschiedene Versionen sein. Dies kann ein Albtraum sein, wenn Software deinstalliert wird, um den verbleibenden Müll zu beseitigen, und es nimmt auch viel mehr Speicherplatz mit Bibliotheksredundanz in Anspruch.

Jeff
quelle