Я довольно давно использую Linux, и мне всегда было интересно, как Windows справляется с такими зависимостями программ, как apt-get, способность, Pacman, ням и другие менеджеры пакетов умеют. Иногда мой менеджер пакетов сообщал мне, что эта версия этой библиотеки необходима для этого пакета или что может возникнуть конфликт.
Как Windows справляется со всем этим?
Изменить 4/4/2014: Привет, OP, посмотрите, что было только что выпущено сегодня:
Я просто хотел немного расширить принятый ответ, потому что он немного скуден. В ответе Филипе не упоминаются стратегии, которые на самом деле Windows делает использовать для решения или смягчения проблем зависимости программ, таких как хранилище компонентов (WinSxS), глобальный кеш сборок, система MSI и т. д. Но, с другой стороны, он в принципе правильно в том смысле, что разработчик несет ответственность за включение любых настраиваемых библиотек в приложение и проверку наличия зависимостей перед фиксацией транзакции установки.
Windows менее модульна, чем Linux, у которой есть свои плюсы и минусы. С другой стороны, Windows более монолитна, что означает, что сравнительно меньше компонентов операционной системы являются съемными или необязательными, как в Linux. (Хотя Windows постепенно становится лучше.)
Но с другой стороны, это означает, что разработчики могут делать гораздо больше предположений о том, какие библиотеки уже будут у пользователя на его или ее машине. И после установки различные версии этих библиотек будут храниться бок о бок в хранилище компонентов, так что у вас больше не будет App1, лающего о необходимости crapDLL.dll, и App2, лающего о необходимости одновременной другой версии crapDLL.dll и т. д.
Это не так. Если мы не говорим о .СЕТЬ который просит вас установить версию X фреймворка в соответствии с компилятором.
Все остальное просто выдает ошибку. Если повезет, вы получите missing dll xxxx.dll
. Хотя у большинства установщиков есть необходимые библиотеки, необходимые для запуска программного обеспечения.
В Windows автор программного обеспечения должен обеспечивать управление версиями своих библиотек. В Windows есть несколько средств, помогающих с этим.
Службы установщика Windows и доверенного установщика, которые взаимодействуют с программами установки (.msi). Также существует некоторая вспомогательная технология, называемая изолированными приложениями и параллельными сборками, которая помогает устранять конфликты управления версиями.
Для приложений .NET framework есть глобальный кэш сборок, сборки со строгими именами и основные манифесты.
В Windows 8 и 8.1 есть Windows App Store вместе с Windows Runtime Library (замена API Win32).
редактировать: В основе большинства этих технологий лежат манифесты сборок, встроенные файлы, содержащие номера версий, авторов, зависимые сборки и их версии, а также другие данные.
В других ответах правильно указано, что управление пакетами и ОС - это отдельные идеи, но не упоминается решение.
Самой похожей на apt-get или yum системой управления пакетами в Windows в настоящее время будет Шоколадный. Он позволяет людям устанавливать / удалять пакеты (msi, exe, сценарии PowerShell), и эти пакеты могут содержать информацию об их зависимостях, которая может быть автоматически разрешена Chocolatey.
Пакет обычно содержит ссылку на двоичные файлы и сценарии для управления процессом установки. Пакет также может содержать двоичные файлы или любые другие необходимые файлы (зависимости должны быть в отдельном пакете). Chocolatey также может использовать внешние системы управления пакетами, такие как Microsoft Установщик веб-платформы, Ruby Gems, Python и так далее.
Насколько я понимаю, единственные зависимости, обрабатываемые Windows, - это библиотеки Microsoft. Если вы установите, например, программу с открытым исходным кодом в Windows, такую как Blender, у нее будут библиотеки libavcodec и ffmpeg в своих отдельных файлах dll, а если вы затем установите, скажем, OpenShot, он установит свою собственную копию libavcodec в собственном каталоге, и они могут быть совершенно разных версий. Это может быть кошмаром при удалении программного обеспечения для очистки оставшегося мусора, а также занимает намного больше места на диске из-за избыточности библиотеки.