Как 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 и так далее.


Абсолютно! Есть несколько сторонних менеджеров пакетов, которые также работают в 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 находится в своем собственном каталоге, и они могут быть совершенно разных версий. Это может быть кошмаром при удалении программного обеспечения для очистки ненужного мусора, а также занимает больше места на диске с избыточностью библиотеки.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.