Как Windows обрабатывает программные зависимости?

23

Я долгое время пользовался Linux, и мне всегда было интересно, как Windows справилась с такими программными зависимостями, как apt-get , aptitude , Pacman , yum и другие менеджеры пакетов. Иногда мой менеджер пакетов говорил мне, что эта версия библиотеки нужна для этого пакета или что возникнет конфликт.

Как Windows справляется со всем этим?

Нико
источник
2
Windows не обрабатывает зависимости версий. Большинство установщиков версий делают. Если вы еще не знакомы с ним, проверьте InnoSetup: jrsoftware.org/isinfo.php
paulsm4
4
Вероятно, стоит отметить, что даже в ваших примерах управление зависимостями - это не Linux как таковой, а менеджер пакетов.
GalacticCowboy
3
Как Windows обрабатывает программные зависимости? Плохо, по моему опыту.
rlms

Ответы:

29

Это не так. Если мы не говорим о .NET, который просит вас установить версию фреймворка X в соответствии с компилятором.

Все остальное просто выдает ошибку. Если повезет, вы получите missing dll xxxx.dll. Тем не менее, для большинства программ установки включены необходимые библиотеки для запуска программного обеспечения.

Филипе ЯБа Полидо
источник
6
Значит, установщик каждой программы должен проверять зависимости? Так что, если установщик отстой, вы, возможно, не сможете использовать программу вообще ..
Nico
Забыл сказать, нет, вы можете использовать тогда программу, но вы должны выяснить, какая DLL или фреймворк ей нужны.
Филипе ЯБа Полидо
9
@Filipe Итак, тот факт, что вы должны установить среду выполнения V C ++, является причиной того, что вы ненавидите программное обеспечение .NET? Также в Windows по умолчанию уже установлена ​​платформа .NET, поэтому, если вы выберете нужную версию, она будет работать «из коробки». И тот факт, что вам необходимо загрузить и установить недостающие общие объекты, на самом деле не ограничивается каким-либо конкретным программным обеспечением / языком / инфраструктурой по понятным причинам (такая же «проблема» может возникнуть и в * nix).
Во
2
@FilipeYaBaPolido: Ваша ненависть особенно неуместна, поскольку среда выполнения VC ++ 2008 предназначена для приложений C ++, а не приложений .Net. Очевидно, что приложениям .Net нужна платформа .Net, а приложениям C ++ - среда C ++ (среда выполнения), на самом деле довольно простая. Теперь конкретный программный пакет может содержать как компоненты C ++, так и .Net, поэтому они не являются эксклюзивными.
MSalters
2
Ребята расслабьтесь, я не ненавижу .Net или VC ++. Я даже кодирую в .Net / C #, когда это необходимо, это инструмент. Но я работаю с разными инструментами и вижу различия. Извините, если я объяснил неправильно.
Филипе ЯБа Полидо
40

Изменить 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 в то же время время и т. д.

Райан Райс
источник
Спасибо Райан. Я знаю, что должен уточнить свой ответ, но, поскольку английский не является моим основным языком, у меня все еще есть некоторые трудности, чтобы выразить себя.
Филипе ЯБа Полидо
Хорошо описано. Однако я бы сказал, что он становится значительно более модульным на стороне сервера - опции без ядра и графического интерфейса, настройка на основе ролей и функций.
EricB
Я прочитал эту статью сегодня утром, и она напомнила мне об этом посте. Это занимательное, хотя и нерегулярное
Райан Райс
9

В Windows это зависит от автора программного обеспечения для обеспечения контроля версий для своих библиотек. В Windows есть несколько способов помочь с этим.

Службы Windows Installer и Trusted Installer, которые взаимодействуют с программами установки (.msi). Существует также некоторая поддерживающая технология, называемая изолированными приложениями и параллельными сборками, которая помогает разобраться в конфликтах версий.

Для приложений .NET Framework есть глобальный кэш сборок, сборки со строгими именами и основные манифесты.

В Windows 8 и 8.1 есть Магазин приложений Windows вместе с Windows Runtime Library (замена win32 API).

редактирование: в основе большинства этих технологий лежат манифесты сборок, встроенные файлы, которые предоставляют номера версий, авторов, зависимые сборки и их версии, а также другие данные.

Золотая рыбка сэндвич
источник
6

Другие ответы правильно указывают на то, что управление пакетами и ОС являются отдельными идеями, но не упомянули о решении.

В настоящее время наиболее похожей системой управления пакетами на apt-get или yum в Windows будет Chocolatey . Он позволяет людям устанавливать / удалять пакеты (msi, exe, сценарии powershell и т. Д.), И эти пакеты могут содержать информацию об их зависимостях, которая может быть автоматически разрешена Chocolatey.

Пакет обычно содержит ссылку на двоичные файлы и скрипты для управления процессом установки. Пакет также может содержать двоичные файлы или любые другие необходимые файлы (зависимости должны быть в отдельном пакете). Chocolatey также может использовать внешние системы управления пакетами, такие как Microsoft Web Platform Installer , Ruby Gems, Python и так далее.

AllenSanborn
источник
Абсолютно! Есть несколько сторонних менеджеров пакетов, которые также работают в Windows. Единственное, что я могу назвать на вершине своей головы, - это NuGet, менеджер пакетов / зависимостей для разработчиков приложений, встроенный прямо в Visual Studio. Тем не менее, я считаю, что вопрос был больше в том, как операционная система обрабатывает пакеты, где эти решения больше направлены на то, как пользователь может обрабатывать пакеты.
Золотая рыбка сэндвич
Извините, я не включил некоторую информацию о Шоколад. Шоколад основан на Nuget. Nuget и Nuspec - это просто пакет вещей и спецификация зависимостей. В случае программной среды, такой как .Net (ruby, node, ...), зависимости обычно являются программными компонентами (dll, exe, js, ...). Это все компоненты, которые использует приложение.
AllenSanborn
В случае Chocolatey, хотя пакет является целым приложением или зависимостью приложения (инфраструктура приложения, такая как java, .net, ruby). Пакет Nuget содержит сценарии PowerShell (возможно, также и установщик), которые будут управлять установкой приложения, а файл Nuspec описывает приложение и его зависимости, например Powershell, зависит от .Net. Существует также Boxstarter, который фокусирует уровень выше, описывая конфигурацию машины и от чего она зависит. Довольно аккуратные вещи. Boxstarter попадает в сферу того, для чего люди используют Chef или Puppet.
AllenSanborn
0

Из того, что я понимаю, единственными зависимостями, обрабатываемыми Windows, являются специфические библиотеки Microsoft. Если вы установите, например, программу с открытым исходным кодом в Windows, такую ​​как Blender, она будет иметь библиотеки libavcodec и ffmpeg в своих отдельных файлах dll, а если вы установите, скажем, OpenShot, она установит свою собственную копию libavcodec находится в своем собственном каталоге, и они могут быть совершенно разных версий. Это может быть кошмаром при удалении программного обеспечения для очистки ненужного мусора, а также занимает больше места на диске с избыточностью библиотеки.

Джефф
источник