Windows program bağımlılıklarını nasıl ele alıyor?


23

Linux'u bir süredir kullandım ve her zaman Windows'un apt-get , yetenek , Pacman , yum ve diğer paket yöneticilerinin yapabildikleri program bağımlılıklarını nasıl kaldırabildiğini merak ettim . Bazen, paket yöneticim bana bu kütüphanenin bu sürümünün bu paket için gerekli olduğunu ya da bazı çelişkilerin olacağını söylerdi.

Windows bunların hepsini nasıl idare ediyor?


2
, Windows gelmez sürüm bağımlılıkları işleyip. Çoğu sürüm yükleyici bunu yapar. Eğer zaten aşina değilseniz, InnoSetup: jrsoftware.org/isinfo.php
paulsm4 23:14

4
Muhtemelen örneklerinde bile , bağımlılıkları yöneten Linux değil , paket yöneticisi olduğunu belirtmekte fayda var .
GalacticCowboy

3
Windows program bağımlılıklarını nasıl ele alıyor? Kötü, benim deneyimlerime göre.
Mart'ta

Yanıtlar:


29

Öyle değil. Bahsettiğimiz sürece .NET derleyici ile uygun çerçeve sürümünü X yüklemek sorar hangi.

Geriye kalan her şey bir hata veriyor. Şansın varsa olsun missing dll xxxx.dll. Bununla birlikte, çoğu kurucu yazılımı çalıştırmak için gerekli kütüphanelere sahip olacaktır.


6
Yani, bağımlılıkları kontrol etmek her programın kurucusuna kalmış mı? Yükleyici emerse, programı hiç kullanamayabilirsiniz ..
Nico

Söylemeyi unuttum, hayır, daha sonra programı kullanabilirsiniz, ancak hangi DLL veya çerçeveye ihtiyacı olduğunu bulmak zorundasınız.
Filipe YaBa Polido

9
@Filipe Yani, V C ++ çalışma zamanını yüklemeniz gerekmesi, .NET yazılımından nefret etmenizin sebebi midir? Ayrıca Windows varsayılan olarak önceden kurulmuş bir .NET çerçevesine sahiptir, bu nedenle doğru sürümü hedeflerseniz kutudan çıkar. Ve eksik paylaşılan nesneleri indirmek ve yüklemek zorunda olmanız gerçeği, bariz sebeplerden dolayı herhangi bir yazılım / dil / çerçeveyle sınırlı değildir (aynı zamanda "nix'te de aynı" problemi olabilir).
Voo

2
@FilipeYaBaPolido: VC ++ 2008 çalışma zamanı .Net uygulamaları için değil C ++ uygulamaları için olduğundan nefretiniz özellikle yanlış. Açıkçası .Net uygulamaları .Net framework ve C ++ uygulamaları gerçekten çok basit C ++ framework (çalışma zamanı) gerekir. Şimdi belirli bir yazılım paketi hem C ++ hem de .NET bölümlerini içerebilir, böylece ikisi münhasır değildir.
MSalters

2
Çocuklar rahatlar, .Net veya VC ++ 'dan nefret etmiyorum. Hatta gerektiğinde bile .Net / C # kod, bir araçtır. Ancak bazı farklı araçlarla çalışıyorum ve farklılıkları görüyorum. Yanlış açıkladıysam özür dilerim.
Filipe YaBa Polido

40

Düzenleme 4/4/2014: Hey OP, bugün yeni çıkanlara bak:

http://blogs.technet.com/b/windowsserver/archive/2014/04/03/windows-management-framework-v5-preview.aspx


Sadece kabul edilen cevabı biraz genişletmek istedim, çünkü ayrıntılarda biraz seyrek. Filipe cevabı, Windows aslında stratejilerinin bahsedilmemektedir yapar bileşen store gibi çözülmesine veya azaltma programı bağımlılık sorunları kullanımını (WinSxS, vs.) genel derleme önbelleği MSI sistemi, Ama öte yandan o var temelde sağ Uygulamaya özel kitaplıklar eklemenin geliştiricinin sorumluluğunda olduğunu ve yükleme işlemine başlamadan önce bağımlılıkların varlığını denetlediğini hissedin.

Windows, pozitif ve negatif olan Linux'tan daha az modülerdir. Aşağı tarafta, Windows daha yekpare, yani işletim sisteminin nispeten daha az bileşeni Linux'ta olduğu gibi çıkarılabilir veya isteğe bağlı. (Windows bu konuda yavaş yavaş iyileşiyor olsa da.)

Ancak, yukarı tarafta, geliştiricilerin bir kullanıcının makinesinde zaten sahip olacağı kitaplıklar hakkında daha fazla varsayımlarda bulunabilecekleri anlamına gelir. Ve bu kütüphanelerin çeşitli sürümleri, bir kez kurulduklarında, bileşen mağazasında yan yana depolanacak, böylece artık crapDLL.dll dosyasına ihtiyaç duyacağınız App1 havlamaya ve aynı zamanda crapDLL.dll dosyasının farklı bir versiyonuna ihtiyaç duymaya havlayan App2'ye sahip olmayacaksınız. zaman vs.


Teşekkürler Ryan. Cevabımı detaylandırmam gerektiğini biliyorum, ancak İngilizce ana dilim olmadığı için kendimi ifade etmekte zorlanıyorum.
Filipe YaBa Polido 23:14

İyi tanımlanmış. Bununla birlikte, sunucu tarafında çekirdek / gui içermeyen seçenekler, rol ve özellik tabanlı kurulum konusunda daha modüler hale geldiğini söyleyebilirim.
EricB

Bu sabah bu makaleyi okudum ve bana bu yazıyı hatırlattı. Bu konuyla ilgili teğet olsa eğlenceli bir yazı
Ryan Ries

9

Windows'ta kütüphaneleri için versiyonlama sağlamak yazılım sahibine aittir. Windows bu konuda yardımcı olacak birkaç özelliğe sahiptir.

Yükleme programları (.msi) ile etkileşime giren Windows Installer ve Trusted Installer hizmetleri. İzole Uygulamalar ve Yan Yana Montajlar olarak adlandırılan ve versiyonlama çatışmalarının çözümlenmesine yardımcı olan bazı destekleyici teknolojiler de vardır.

.NET framework uygulamaları için, Genel Kurul Önbelleği, Güçlü Adlandırılmış Montajlar ve çekirdek Kılavuzlarında bulunur.

Windows 8 ve 8.1'de, Windows Çalışma Zamanı Kitaplığı ile birlikte Windows App Store var (win32 API değişimi).

düzenleme: Bu teknolojilerin çoğunun merkezinde diğerlerinin yanı sıra montaj bildirimleri, sürüm numaraları sağlayan gömülü dosyalar, yazarlar, bağımlı derlemeler ve sürümleri bulunur.


6

Diğer cevaplar, paket yönetimi ve işletim sisteminin ayrı fikirler olduğunu ancak bir çözümden bahsetmediğini doğru bir şekilde ortaya koydu.

Windows'ta apt-get veya yum'a en çok benzeyen paket yönetim sistemi şu anda Chocolatey olacaktır . İnsanların paketleri kurmasına / kaldırmasına izin verir (msi, exe, powershell scriptleri) ve bu paketler Chocolatey tarafından otomatik olarak çözülebilen bağımlılıkları hakkında bilgi içerebilir.

Paket genellikle yükleme işlemini yönetmek için ikili dosyalara ve komut dosyalarına bir bağlantı içerir. Paket ayrıca ikili dosyaları veya diğer gerekli dosyaları içerebilir (bağımlılıklar ayrı bir pakette olmalıdır). Chocolatey ayrıca Microsoft'un Web Platform Yükleyicisi , Ruby Gems, Python ve benzeri gibi harici paket yönetim sistemlerini de kullanabilir .


Kesinlikle! Windows'da da çalışan bir avuç üçüncü taraf paket yöneticisi var. Kafamın en tepesinden adlandırabileceğim tek kişi, Visual Studio'da yerleşik olarak bulunan uygulama geliştiricileri için bir paket / bağımlılık yöneticisi olan NuGet. Bu sorunun, işletim sisteminin paketleri nasıl işlediğine, bu çözümlerin bir kullanıcının paketleri nasıl işleyebileceğine daha fazla yönelik olduğunu aradığına inanıyorum.
Goldfish Sandwich

Üzgünüm, Chocolatey hakkında bazı bilgiler eklemedim. Chocolatey Nuget'e dayanıyor. Nuget ve Nuspec sadece bir 'paket' paketi ve bağımlılıkların bir belirtimidir. Net gibi bir yazılım çerçevesi durumunda (yakut, düğüm, ...) bağımlılıklar genellikle yazılım bileşenleridir (dll, exe, js, ...). Bunların hepsi bir uygulamanın kullandığı bileşenlerdir.
AllenSanborn

Chocolatey'in durumunda, paket bütün bir uygulama ya da uygulama bağımlılığı olsa da (java, .net, ruby ​​gibi uygulama çerçevesi). Nuget paketi, uygulamanın kurulumunu yönetecek olan PowerShell komut dosyalarını (isteğe bağlı olarak da yükleyici) içerir ve Nuspec dosyası uygulamayı açıklar ve örneğin Powershell'in bağlı olduğu bağımlılıkları tanımlar. Bir makinenin konfigürasyonunu ve neye bağlı olduğunu tanımlayarak daha yüksek bir seviyeye odaklanan Boxstarter da var. Çok temiz şeyler. Boxstarter, insanların Chef veya Kukla'ı ne için kullandıklarını öğreniyor.
AllenSanborn

0

Anladığım kadarıyla, Windows tarafından ele alınan tek bağımlılıklar Microsoft'a özgü kütüphanelerdir. Örneğin, Blender gibi Windows'ta bir açık kaynak programı yüklerseniz, libavcodec ve ffmpeg kütüphanelerinin kendi ayrı dll dosyalarına sahip olacakları ve daha sonra şunu söylerseniz, OpenShot'u yüklerseniz, libavcodec kendi dizininde ve tamamen farklı versiyonlarda olabilirler. Bu, geride bırakılan gereksiz dosyaları temizlemek için yazılım kaldırırken kabus olabilir ve ayrıca kütüphane yedekliliği ile daha fazla disk alanı kaplar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.