विंडोज प्रोग्राम की निर्भरता को कैसे संभालता है?


23

मैंने काफी समय से लिनक्स का उपयोग किया है, और मुझे हमेशा आश्चर्य होता है कि विंडोज एप्टिट - गेट , एप्टीट्यूड , पैडमैन , यम और अन्य पैकेज मैनेजरों जैसे प्रोग्राम डिपेंडेंसी को कैसे संभालने में सक्षम था। कभी-कभी, मेरा पैकेज प्रबंधक मुझे बताता है कि इस पैकेज के लिए उस लाइब्रेरी के इस संस्करण की आवश्यकता थी या कि कुछ संघर्ष होगा।

विंडोज उस सामान को कैसे संभालता है?


2
विंडोज संस्करण निर्भरता को संभाल नहीं करता है । अधिकांश संस्करण इंस्टॉलर करते हैं। यदि आप पहले से ही इससे परिचित नहीं हैं, तो InnoSetup: jrsoftware.org/isinfo.php
paulsm4

4
यह शायद ध्यान देने योग्य है कि आपके उदाहरणों में भी, यह लिनक्स नहीं है, जो कि निर्भरता का प्रबंधन कर रहा है - यह पैकेज प्रबंधक है।
गैलेक्टिक

3
विंडोज प्रोग्राम की निर्भरता को कैसे संभालता है? बुरी तरह से, मेरे अनुभव में।
rlms

जवाबों:


29

यह नहीं है जब तक हम .NET के बारे में बात नहीं कर रहे हैं जो आपको कंपाइलर के अनुसार फ्रेमवर्क संस्करण X स्थापित करने के लिए कहता है।

बाकी सब सिर्फ एक त्रुटि फेंकता है। भाग्य से, आपको मिलता है missing dll xxxx.dll। हालाँकि, अधिकांश इंस्टॉलर्स में सॉफ़्टवेयर चलाने के लिए आवश्यक लाइब्रेरी शामिल होंगी।


6
तो यह प्रत्येक कार्यक्रम के इंस्टॉलर पर निर्भर है कि क्या वह डिपेंडेंसी के लिए जाँच करे? इसलिए यदि इंस्टॉलर बेकार है, तो आप प्रोग्राम का उपयोग करने में सक्षम नहीं हो सकते हैं ..
निको

कहना भूल गया, नहीं, आप तब प्रोग्राम का उपयोग कर सकते हैं, लेकिन आपको यह पता लगाना होगा कि उसे किस DLL या फ्रेमवर्क की जरूरत है।
फिलीप याबा पोलीडो

9
@ फ़ीलिप इस तथ्य के लिए कि आपको V C ++ रनटाइम इंस्टॉल करना है यही कारण है कि आप .NET सॉफ़्टवेयर से नफरत करते हैं? डिफ़ॉल्ट रूप से विंडोज में पहले से ही एक .NET फ्रेमवर्क स्थापित है, इसलिए यदि आप सही संस्करण को लक्षित करते हैं तो यह बॉक्स से बाहर काम करेगा। और यह तथ्य कि आपको लापता साझा की गई चीज़ों को डाउनलोड और इंस्टॉल करना है, स्पष्ट कारणों के लिए वास्तव में किसी विशेष सॉफ्टवेयर / भाषा / ढांचे तक सीमित नहीं है (आप * निक्स में भी "समान" समस्या हो सकती है)।
वू

2
@FilipeYaBaPolido: आपकी नफरत विशेष रूप से गलत है क्योंकि VC ++ 2008 रनटाइम C ++ अनुप्रयोगों के लिए है, न कि .Net अनुप्रयोगों के लिए। जाहिर है। नेट अनुप्रयोगों के लिए। नेट फ्रेमवर्क और सी ++ एप्लिकेशन को सी ++ फ्रेमवर्क (रनटाइम) की आवश्यकता होती है, वास्तव में काफी सरल। अब एक विशेष सॉफ्टवेयर पैकेज में C ++ और .Net दोनों भाग हो सकते हैं, इसलिए दोनों अनन्य नहीं हैं।
MSalters

2
दोस्तों आराम करो, मुझे नफरत नहीं है। नेट या वीसी ++। मैं भी .Net / C # को जरूरत पड़ने पर कोड करता हूं, यह एक उपकरण है। लेकिन मैं कुछ अलग उपकरणों के साथ काम करता हूं और अंतर देखता हूं। क्षमा करें अगर मैंने गलत समझाया।
फिलि याबा पोलीडो

40

संपादित करें 4/4/2014: अरे ओपी, जो अभी जारी किया गया था उसे देखें:

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


मैं स्वीकार किए गए उत्तर पर थोड़ा विस्तार करना चाहता था, क्योंकि यह विवरण पर थोड़ा विरल है। फिलिप के जवाब रणनीतियों का कोई जिक्र नहीं है कि Windows वास्तव में बनाता करता उपयोग संकल्प या कम करने कार्यक्रम निर्भरता मुद्दों के लिए, घटक की दुकान की तरह (WinSxS,) वैश्विक विधानसभा कैश, एमएसआई प्रणाली, आदि लेकिन दूसरी तरफ वह मूल रूप से सही में यह समझें कि ऐप के साथ किसी भी कस्टम लाइब्रेरी को शामिल करना डेवलपर की जिम्मेदारी है, और इंस्टॉल किए गए लेन-देन करने से पहले निर्भरता के अस्तित्व की जांच करें।

विंडोज लिनक्स की तुलना में कम मॉड्यूलर है, जिसमें सकारात्मकता और नकारात्मकता है। नीचे की तरफ, विंडोज अधिक अखंड है, जिसका अर्थ है कि ऑपरेटिंग सिस्टम के तुलनात्मक रूप से कम घटक लिनक्स में हटाने योग्य या वैकल्पिक हैं। (हालांकि विंडोज धीरे-धीरे उसके बारे में बेहतर हो रहा है।)

लेकिन ऊपर की तरफ, इसका मतलब है कि डेवलपर्स उन पुस्तकालयों के बारे में बहुत अधिक धारणा बनाने में सक्षम हैं जो उपयोगकर्ता अपने मशीन पर पहले से ही मौजूद होंगे। और उन पुस्तकालयों के विभिन्न संस्करण, जिन्हें एक बार स्थापित किया गया है, उन्हें घटक स्टोर में कंधे से कंधा मिलाकर रखा जाएगा , ताकि अब आपको CrapDLL.dll की आवश्यकता के बारे में App1 भौंकने की ज़रूरत न हो, और App2 भौंकने के बारे में एक ही संस्करण crapDLL.dll की आवश्यकता होगी। समय, आदि


धन्यवाद रयान। मुझे पता है कि मुझे अपना उत्तर विस्तृत करना चाहिए, लेकिन जैसा कि अंग्रेजी मेरी प्राथमिक भाषा नहीं है, फिर भी मुझे अपने आप को अभिव्यक्त करने के लिए कुछ अंतर हैं।
फिलि याबा पोलीडो

अच्छी तरह से वर्णित है। हालाँकि, मैं कहूंगा कि यह सर्वर की तरफ काफी अधिक मॉड्यूलर हो रहा है - कोर / गुई-फ्री विकल्प, भूमिका और सुविधा आधारित सेटअप।
एरिकबी

मैंने आज सुबह इस लेख को पढ़ा और इसने मुझे इस पोस्ट की याद दिला दी। यह इस विषय पर एक मनोरंजक, यद्यपि स्पर्शनीय वाचन है
Ryan Ries

9

विंडोज में यह सॉफ्टवेयर लेखक पर निर्भर है कि वह अपने पुस्तकालयों के लिए संस्करण उपलब्ध कराए। इसकी मदद से विंडोज में कुछ सुविधाएं हैं।

विंडोज इंस्टॉलर और ट्रस्टेड इंस्टॉलर सेवाएं जो इंस्टॉलेशन प्रोग्राम (.msi) के साथ इंटरैक्ट करती हैं। आइसोलेटेड एप्लिकेशन और साइड-बाय-साइड असेंबली नामक कुछ सहायक प्रौद्योगिकी भी है जो संस्करण संघर्षों को सुलझाने में मदद करती है।

.NET फ्रेमवर्क अनुप्रयोगों के लिए ग्लोबल असेंबली कैश, स्ट्रॉन्ग-नेम्ड असेंबली और कोर मैनिफेस्ट में है।

विंडोज 8 और 8.1 में विंडोज रनटाइम लाइब्रेरी (win32 एपीआई रिप्लेसमेंट) के साथ विंडोज एप स्टोर है।

संपादित करें: इनमें से अधिकांश तकनीकों के मूल में असेंबली मैनिफ़ेस्ट, एम्बेडेड फ़ाइलें हैं जो अन्य डेटा के साथ संस्करण संख्या, लेखक, आश्रित असेंबली और उनके संस्करण प्रदान करते हैं।


6

अन्य उत्तरों ने सही ढंग से इंगित किया कि पैकेज प्रबंधन और OS अलग-अलग विचार हैं, लेकिन एक समाधान का उल्लेख नहीं किया है।

वर्तमान में विंडोज पर एप्ट-गेट या यम के लिए सबसे समान पैकेज प्रबंधन प्रणाली वर्तमान में चॉकलेटरी होगी । यह लोगों को पैकेज (मिस्सी, एक्स, पॉवरशेल स्क्रिप्ट) को स्थापित / अनइंस्टॉल करने की अनुमति देता है, और उन पैकेजों में उनकी निर्भरता के बारे में जानकारी हो सकती है जो स्वचालित रूप से चॉकलेटी द्वारा हल की जा सकती हैं।

पैकेज में आमतौर पर बायनेरिज़ और स्क्रिप्ट्स का लिंक होता है जो इंस्टॉल प्रक्रिया को प्रबंधित करता है। पैकेज में बायनेरिज़ या कोई अन्य आवश्यक फाइलें भी हो सकती हैं (निर्भरता एक अलग पैकेज में होनी चाहिए)। Chocolatey Microsoft के वेब प्लेटफ़ॉर्म इंस्टालर , रूबी रत्न, पायथन और जैसे बाहरी पैकेज प्रबंधन प्रणालियों का उपयोग कर सकते हैं ।


पूर्ण रूप से! कुछ मुट्ठी भर थर्ड-पार्टी पैकेज मैनेजर हैं जो विंडोज पर भी चलते हैं। केवल एक जिसे मैं अपने सिर के ऊपर से नाम दे सकता हूं, वह है नूगेट, इसका पैकेज / निर्भरता प्रबंधक है जो एप्लिकेशन डेवलपर्स के लिए विजुअल स्टूडियो में बनाया गया है। उन्होंने कहा कि मेरा मानना ​​है कि सवाल यह था कि ऑपरेटिंग सिस्टम संकुल को कैसे देखता है, जहां ये समाधान इस बात के अधिक होते हैं कि उपयोगकर्ता संकुल को कैसे संभाल सकता है।
गोल्डफिश सैंडविच

क्षमा करें, मैंने चॉकलेट के बारे में कुछ जानकारी शामिल नहीं की। Chocolatey Nuget से आधारित है। Nuget और Nuspec 'सामान' का एक पैकेज और निर्भरता का एक विनिर्देश हैं। एक सॉफ्टवेयर फ्रेमवर्क जैसे .Net (रूबी, नोड, ...) के मामले में निर्भरता आमतौर पर सॉफ्टवेयर घटक (dll, exe, js, ...) हैं। वे सभी घटक हैं जो एक अनुप्रयोग का उपयोग करता है।
एलनसेनबोर्न

चॉकलेटरी के मामले में हालांकि पैकेज एक संपूर्ण अनुप्रयोग या अनुप्रयोग निर्भरता (जावा, .net, रूबी जैसे ऐप फ्रेमवर्क) है। Nuget पैकेज में PowerShell स्क्रिप्ट (वैकल्पिक रूप से इंस्टॉलर भी) है जो ऐप की स्थापना का प्रबंधन करेगा और Nuspec फ़ाइल एप्लिकेशन का वर्णन करती है और इसमें कौन-सी निर्भरताएँ हैं जैसे Powershell .Net पर निर्भर करती है। बॉक्सस्टार्टर भी है जो एक मशीन के कॉन्फ़िगरेशन का वर्णन करके और जो यह निर्भर करता है, के स्तर को अधिक केंद्रित करता है। बहुत साफ सुथरा सामान। बॉक्सस्टार्ट इस दायरे में आ जाता है कि लोग शेफ या कठपुतली का इस्तेमाल किस लिए करते हैं।
एलनसेनबोर्न

0

मैं जो समझता हूं, विंडोज द्वारा नियंत्रित एकमात्र निर्भरता Microsoft विशिष्ट पुस्तकालय हैं। यदि आप एक उदाहरण के रूप में, विंडोज में एक ओपन सोर्स प्रोग्राम जैसे ब्लेंडर में इंस्टॉल करते हैं, तो उसकी अपनी अलग dll फाइलों में libavcodec और ffmpeg लाइब्रेरी होगी, और यदि आप तब OpenShot कहते हैं, तो यह उसकी खुद की प्रति स्थापित करेगा अपने स्वयं के निर्देशिका में libavcodec, और वे पूरी तरह से अलग संस्करण हो सकते हैं। यह एक बुरा सपना हो सकता है जब सॉफ्टवेयर को पीछे छोड़ दिए गए कबाड़ को साफ करने के लिए अनइंस्टॉल किया जाता है, और यह पुस्तकालय अतिरेक के साथ अधिक डिस्क स्थान भी ले जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.