Я долгое время пользовался Linux, и мне всегда было интересно, как Windows справилась с такими программными зависимостями, как apt-get , aptitude , Pacman , yum и другие менеджеры пакетов. Иногда мой менеджер пакетов говорил мне, что эта версия библиотеки нужна для этого пакета или что возникнет конфликт.
Как Windows справляется со всем этим?
Ответы:
Это не так. Если мы не говорим о .NET, который просит вас установить версию фреймворка X в соответствии с компилятором.
Все остальное просто выдает ошибку. Если повезет, вы получите
missing dll xxxx.dll
. Тем не менее, для большинства программ установки включены необходимые библиотеки для запуска программного обеспечения.источник
Изменить 04.04.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, и App2, лающего о необходимости другой версии crapDLL.dll в то же время время и т. д.
источник
В Windows это зависит от автора программного обеспечения для обеспечения контроля версий для своих библиотек. В Windows есть несколько способов помочь с этим.
Службы Windows Installer и Trusted Installer, которые взаимодействуют с программами установки (.msi). Существует также некоторая поддерживающая технология, называемая изолированными приложениями и параллельными сборками, которая помогает разобраться в конфликтах версий.
Для приложений .NET Framework есть глобальный кэш сборок, сборки со строгими именами и основные манифесты.
В Windows 8 и 8.1 есть Магазин приложений Windows вместе с Windows Runtime Library (замена win32 API).
редактирование: в основе большинства этих технологий лежат манифесты сборок, встроенные файлы, которые предоставляют номера версий, авторов, зависимые сборки и их версии, а также другие данные.
источник
Другие ответы правильно указывают на то, что управление пакетами и ОС являются отдельными идеями, но не упомянули о решении.
В настоящее время наиболее похожей системой управления пакетами на apt-get или yum в Windows будет Chocolatey . Он позволяет людям устанавливать / удалять пакеты (msi, exe, сценарии powershell и т. Д.), И эти пакеты могут содержать информацию об их зависимостях, которая может быть автоматически разрешена Chocolatey.
Пакет обычно содержит ссылку на двоичные файлы и скрипты для управления процессом установки. Пакет также может содержать двоичные файлы или любые другие необходимые файлы (зависимости должны быть в отдельном пакете). Chocolatey также может использовать внешние системы управления пакетами, такие как Microsoft Web Platform Installer , Ruby Gems, Python и так далее.
источник
Из того, что я понимаю, единственными зависимостями, обрабатываемыми Windows, являются специфические библиотеки Microsoft. Если вы установите, например, программу с открытым исходным кодом в Windows, такую как Blender, она будет иметь библиотеки libavcodec и ffmpeg в своих отдельных файлах dll, а если вы установите, скажем, OpenShot, она установит свою собственную копию libavcodec находится в своем собственном каталоге, и они могут быть совершенно разных версий. Это может быть кошмаром при удалении программного обеспечения для очистки ненужного мусора, а также занимает больше места на диске с избыточностью библиотеки.
источник