Як 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
Отже, це залежить від встановника кожної програми, щоб перевірити наявність функцій? Тож якщо інсталятор смокче, можливо, ви взагалі не зможете користуватися програмою ..
Ніко,

Забули сказати: ні, ви можете використовувати програму, але ви повинні з'ясувати, яка DLL або структура їй потрібна.
Філіпе ЯБа Полідо

9
@Filipe Тож факт, що вам доведеться встановлювати час виконання V C ++, є причиною, чому ви ненавидите програмне забезпечення .NET? Також у Windows за замовчуванням вже встановлена ​​.NET Framework, тому якщо ви орієнтуєтесь на правильну версію, вона вийде з коробки. А той факт, що вам доведеться завантажувати та встановлювати відсутні відсутні спільні об'єкти, з очевидних причин не обмежується будь-яким конкретним програмним забезпеченням / мовою / рамкою (у * nix ви можете мати ту саму «проблему»).
Voo

2
@FilipeYaBaPolido: Ваша ненависть особливо неприйнятна, оскільки час виконання VC ++ 2008 призначений для додатків C ++, а не додатків NET. Очевидно, що .Net додаткам потрібна .Net Framework, а додаткам C ++ потрібна рамка C ++ (час виконання). Тепер певний програмний пакет може містити як частини C, так і .Net, тому ці дві не є ексклюзивними.
MSalters

2
Хлопці розслабляються, я не ненавиджу .Net або VC ++. Я навіть кодую .Net / C #, коли потрібно, це інструмент. Але я працюю з деякими різними інструментами і бачу відмінності. Вибачте, якщо я пояснив неправильно.
Філіпе ЯБа Полідо

40

Редагувати 4.04.2014: Ей, ОП, подивіться, що тільки що вийшло сьогодні:

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 в одній і тій же час тощо.


Дякую Райан Я знаю, що я повинен розробити свою відповідь, але оскільки англійська мова не є моєю основною мовою, у мене все ж є певні труднощі, щоб виразити себе.
Філіпе ЯБа Полідо

Добре описано. Я б, однак, сказав, що він стає значно більш модульним на сервері - параметри без ядра / gui, налаштування на основі ролей та функцій.
EricB

Я прочитав цю статтю сьогодні вранці, і це нагадало мені цей пост. Це цікаве, хоч і дотичне читання на цю тему: blogs.msdn.com/b/oldnewthing/archive/2014/04/11/10516280.aspx
Ryan Ries

9

У Windows, автор програмного забезпечення повинен надавати версії для своїх бібліотек. У Windows є кілька засобів, які допоможуть у цьому.

Інсталятор Windows та служби довіреного інсталятора, які взаємодіють із програмами інсталяції (.msi). Існує також деяка підтримуюча технологія, яка називається Ізольовані додатки та збоку в зборах, які допомагають розбирати конфлікти версій.

Для програмних застосувань .NET є кеш глобальної асамблеї, сильні іменні асамблеї та основні маніфести.

У Windows 8 та 8.1 є магазин додатків Windows разом із бібліотекою виконання програми Windows (заміна API Win32).

редагувати: Основою більшості цих технологій є складові маніфести, вбудовані файли, що містять серед інших даних номери версій, авторів, залежні збірки та їх версії.


6

Інші відповіді правильно вказували, що управління пакетами та ОС - це окремі ідеї, але не згадували рішення.

Найбільш схожа система управління пакетами для apt-get або yum в Windows на даний момент була Chocolatey . Це дозволяє людям встановлювати / видаляти пакунки (msi, exe, скрипти повноважень,), а ці пакети можуть містити інформацію про їх залежності, яку може автоматично вирішити Chocolatey.

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


Абсолютно! Існує декілька сторонніх менеджерів пакетів, які також працюють у Windows. Єдиний, кого я можу назвати у верхній частині голови - це NuGet, його менеджер пакетів / залежностей для розробників додатків, вбудований прямо у Visual Studio. Це означає, що я вважаю, що питання більше шукає, як операційна система обробляє пакети, де ці рішення більше спрямовані на те, як користувач може обробляти пакунки.
Сендвіч із

Вибачте, що я не включив інформацію про Chocolatey. Шоколад базується на Nuget. Nuget і Nuspec - це лише пакет "матеріалів" і специфікація залежностей. У випадку програмного забезпечення, такого як .Net (ruby, node, ...), зазвичай, це компоненти програмного забезпечення (dll, exe, js, ...). Це всі компоненти, які використовує додаток.
AllenSanborn

У випадку Chocolatey, хоча пакет є цілою залежністю від програми або програми (рамки програми, такі як java, .net, ruby). Пакет Nuget містить сценарії PowerShell (необов'язково і інсталятор), який керуватиме встановленням додатка, а файл Nuspec описує додаток та залежність від нього, наприклад, Powershell залежить від .Net. Також є Boxstarter, який фокусується на рівень вище, описуючи конфігурацію машини і від чого вона залежить. Досить акуратні речі. Boxstarter потрапляє у царину того, для чого люди використовують шеф-кухаря чи лялечку.
AllenSanborn

0

Наскільки я розумію, єдиними залежностями, якими керує Windows, є певні бібліотеки Microsoft. Якщо ви встановите, наприклад, програму з відкритим кодом у Windows, як Blender, вона матиме бібліотеки libavcodec і ffmpeg у власних файлах dll, і якщо ви встановите, скажімо, OpenShot, вона встановить власну копію libavcodec у власному каталозі, і вони можуть бути абсолютно різними версіями. Це може бути кошмаром при видаленні програмного забезпечення для очищення непотрібних залишків, а також займає більше місця на диску з надмірністю бібліотеки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.