Frage Wie behandelt Windows Programmabhängigkeiten?


Ich habe Linux schon eine ganze Weile benutzt, und ich habe mich immer gefragt, wie Windows mit den Abhängigkeiten von Programmen umgehen konnte apt-get, Eignung, Pacman, lecker und andere Paketmanager sind dazu in der Lage. Manchmal würde mein Paketmanager mir sagen, dass diese Version dieser Bibliothek für dieses Paket benötigt wurde oder dass es einen Konflikt geben würde.

Wie geht Windows mit all diesen Dingen um?


22
2018-03-23 18:25


Ursprung


Windows nicht Handle Versionsabhängigkeiten. Die meisten Versionsprogrammierer tun dies. Wenn Sie noch nicht damit vertraut sind, schauen Sie sich InnoSetup an: jrsoftware.org/isinfo.php - paulsm4
Es ist wahrscheinlich erwähnenswert, dass es nicht in Ihren Beispielen ist Linux per se, die die Abhängigkeiten verwaltet - es ist der Paketmanager. - GalacticCowboy
Wie behandelt Windows Programmabhängigkeiten? Schlecht, nach meiner Erfahrung. - rlms


Antworten:


Es tut es nicht. Es sei denn, wir sprechen darüber .NETZ Sie werden aufgefordert, die Framework-Version X entsprechend dem Compiler zu installieren.

Alles andere wirft nur einen Fehler auf. Mit etwas Glück bekommst du missing dll xxxx.dll. Die meisten Installationsprogramme enthalten jedoch die erforderlichen Bibliotheken, um die Software ausführen zu können.


29
2018-03-23 18:32



Es liegt also am Installer jedes Programms, nach den Abhängigkeiten zu suchen? Also, wenn der Installer saugt, können Sie möglicherweise das Programm überhaupt nicht verwenden .. - Nico
Vergessen zu sagen, nein, Sie können dann Programm verwenden, aber Sie müssen herausfinden, welche DLL oder Framework benötigt wird. - Filipe YaBa Polido
@Filipe Also die Tatsache, dass du das V installieren musst C ++ Laufzeit ist der Grund, warum Sie .NET-Software hassen? Auch Windows hat standardmäßig bereits ein .NET Framework installiert. Wenn Sie also die richtige Version anvisieren, funktioniert es sofort. Und die Tatsache, dass Sie fehlende gemeinsame Objekte herunterladen und installieren müssen, ist aus naheliegenden Gründen nicht auf eine bestimmte Software / Sprache / Framework beschränkt (Sie können das gleiche "Problem" auch in * nix haben). - Voo
@FilipeYaBaPolido: Ihr Hass ist besonders unangebracht, da die VC ++ 2008-Laufzeit für C ++ - Anwendungen und nicht für .NET-Anwendungen gilt. Offensichtlich müssen .Net-Anwendungen das .Net-Framework und C ++ - Anwendungen das C ++ - Framework (Runtime) benötigen, ganz einfach. Jetzt kann ein bestimmtes Softwarepaket sowohl C ++ - als auch. NET-Teile enthalten, so dass die beiden nicht exklusiv sind. - MSalters
Leute entspannen, ich hasse .Net oder VC ++ nicht. Ich schreibe sogar in .Net / C # wenn nötig, es ist ein Werkzeug. Aber ich arbeite mit verschiedenen Tools und sehe die Unterschiede. Tut mir leid, wenn ich falsch erklärt habe. - Filipe YaBa Polido


Edit 4/4/2014: Hey OP, sieh 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 ein wenig auf die akzeptierte Antwort eingehen, weil es ein wenig spärlich ist. In Filipes Antwort werden die Strategien von Windows nicht erwähnt tut Verwenden Sie, um Probleme mit der Programmabhängigkeit zu lösen oder zu mildern, wie den Komponentenspeicher (WinSxS), den globalen Assemblycache, das MSI-System usw. Aber andererseits ist er Grundsätzlich gilt in dem Sinne, dass der Entwickler dafür verantwortlich ist, alle benutzerdefinierten Bibliotheken in die App einzubinden und vor der Übergabe an die Installationstransaktion nach Abhängigkeiten zu suchen.

Windows ist weniger modular als Linux, was Positives und Negatives hat. Auf der anderen Seite ist Windows monolithischer, dh vergleichsweise weniger Komponenten des Betriebssystems sind entfernbar oder optional wie in Linux. (Obwohl Windows langsam besser wird.)

Auf der anderen Seite bedeutet das, dass Entwickler viel mehr Annahmen darüber treffen können, welche Bibliotheken ein Benutzer bereits auf seinem Computer haben wird. Und verschiedene Versionen dieser Bibliotheken, sobald sie installiert sind, werden gespeichert Seite an Seite im Komponentenspeicher, so dass App1 nicht mehr bellt, dass crackDLL.dll benötigt wird, und App2 bellt, dass eine andere Version von crapDLL.dll zur gleichen Zeit benötigt wird usw.


40
2018-03-23 19:23



Danke 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 featurebasiertes Setup. - EricB
Ich habe diesen Artikel heute Morgen gelesen und es 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


In Windows ist es Aufgabe des Softwareautors, eine Versionierung für seine Bibliotheken bereitzustellen. Windows hat ein paar Möglichkeiten, um damit zu helfen.

Der Windows Installer und die vertrauenswürdigen Installationsdienste, die mit Installationsprogrammen (.msi) interagieren. Es gibt auch eine unterstützende Technologie namens Isolierte Anwendungen und Side-by-Side-Assemblys, mit denen Versionskonflikte gelöst werden können.

Für .NET-Framework-Anwendungen gibt es den Global Assembly Cache, Strong-Named Assemblies und die Kernmanifeste.

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

bearbeiten: Kern der meisten dieser Technologien sind Assembly-Manifeste, eingebettete Dateien, die neben anderen Daten Versionsnummern, Autoren, abhängige Assemblys und deren Versionen bereitstellen.


9
2018-03-23 19:28





Die anderen Antworten haben richtigerweise darauf hingewiesen, dass Paketverwaltung und Betriebssystem separate Ideen sind, aber keine Lösung erwähnt haben.

Das ähnlichste Paketverwaltungssystem zu apt-get oder yum unter Windows wäre derzeit Schoko. Es erlaubt Benutzern, Pakete zu installieren / deinstallieren (msi, exe, Powershell-Skripte,) und diese Pakete können Informationen über ihre Abhängigkeiten enthalten, die von Chocolatey automatisch gelö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 in einem separaten Paket enthalten sein). Chocolatey kann auch externe Paketverwaltungssysteme wie Microsoft verwenden Webplattform-Installer, Ruby Gems, Python und so weiter.


5
2018-03-24 18:03



Absolut! Es gibt eine Handvoll Paketmanager von Drittanbietern, die auch unter Windows laufen. Die einzige, die ich von ganzem Herzen nennen kann, ist NuGet, ein Paket / Abhängigkeits-Manager für Anwendungsentwickler, der direkt in Visual Studio integriert ist. Das heißt, ich glaube, die Frage war eher, wie das Betriebssystem Pakete behandelt, wo diese Lösungen mehr darauf abzielen, wie ein Benutzer Pakete handhaben könnte. - Goldfish Sandwich
Leider habe ich keine Informationen über Chocolatey angegeben. Chocolatey basiert auf Nuget. Nuget und Nuspec sind nur ein Paket von "Zeug" und eine Spezifikation von Abhängigkeiten. Im Falle eines Software-Frameworks wie .Net (Ruby, Node, ...) sind die Abhängigkeiten in der Regel Softwarekomponenten (dll, exe, js, ...). Das sind alles Komponenten, die eine Anwendung verwendet. - AllenSanborn
In Chocolateys Fall ist das Paket jedoch eine vollständige Anwendungs- oder Anwendungsabhängigkeit (App-Framework wie Java, .net, Ruby). Das Nuget-Paket enthält PowerShell-Skripts (optional auch das Installationsprogramm), die die Installation der App verwalten, und die Nuspec-Datei beschreibt die Anwendung und welche Abhängigkeiten sie hat, z. Powershell hängt von .Net ab. Es gibt auch Boxstarter, die eine höhere Ebene fokussieren, indem sie die Konfiguration einer Maschine beschreiben und worauf es ankommt. Ziemlich ordentliche Sachen. Boxstarter kommt in den Bereich dessen, wofür die Leute Chef oder Puppet benutzen. - AllenSanborn


Soweit ich weiß, sind die einzigen Abhängigkeiten, die von Windows behandelt werden, Microsoft-spezifische Bibliotheken. Wenn Sie beispielsweise ein Open-Source-Programm in Windows wie Blender installieren, wird es die libavcodec- und die ffmpeg-Bibliotheken in eigenen separaten DLL-Dateien haben, und wenn Sie dann OpenShot installieren, installiert es seine eigene Kopie des libavcodec in einem eigenen Verzeichnis, und sie können völlig unterschiedliche Versionen sein. Dies kann ein Albtraum sein, wenn Software deinstalliert wird, um den zurückgelassenen Müll zu bereinigen, und er benötigt außerdem viel Speicherplatz mit Bibliotheksredundanz.


0
2018-05-04 00:34