2008-09-28 12 views
9

एक चीज जिसे मैंने हमेशा सोचा है कि सॉफ़्टवेयर पैच कैसे काम करता है। बहुत से सॉफ़्टवेयर बस अपनी बाइनरी पर नए संस्करण जारी करते हैं जिन्हें पुराने संस्करणों पर स्थापित करने की आवश्यकता होती है, लेकिन कुछ सॉफ़्टवेयर (विशेष रूप से विंडोज़ जैसे ऑपरेटिंग सिस्टम) बहुत छोटे पैच जारी करने में सक्षम होते हैं जो बग को सही करते हैं या मौजूदा में कार्यक्षमता जोड़ते हैं सॉफ्टवेयर।छोटे सॉफ्टवेयर कैसे बड़े सॉफ्टवेयर सही पैच करते हैं?

अधिकांश समय मैं देखता हूं कि पैच संभवतः पूरे अनुप्रयोगों, या यहां तक ​​कि छोटी फ़ाइलों को भी लागू नहीं कर सकता है जो अनुप्रयोगों के भीतर उपयोग किए जाते हैं। मेरे लिए ऐसा लगता है कि वास्तविक बाइनरी को संशोधित किया जा रहा है।

इन प्रकार के पैच वास्तव में कैसे लागू किए जाते हैं? क्या कोई मुझे किसी भी संसाधन को इंगित कर सकता है जो यह बताता है कि यह कैसे काम करता है, या यह एक छोटे से घटकों को बदलने के रूप में सरल है जैसे कि किसी अनुप्रयोग में लिंक्ड लाइब्रेरीज़?

मुझे शायद इस तरह से तैनाती करने की आवश्यकता नहीं होगी, लेकिन यह जानकर उत्सुकता है कि यह कैसे काम करता है। अगर मैं अपनी समझ में सही हूं कि पैच वास्तव में केवल बाइनरी फाइलों के हिस्सों को संशोधित कर सकता है, तो क्या यह .NET में करना संभव है? यदि यह है तो मैं इसे सीखना चाहता हूं क्योंकि यह ढांचा है जिसे मैं सबसे परिचित हूं और मैं समझना चाहता हूं कि यह कैसे काम करता है।

उत्तर

14

यह आमतौर पर बाइनरी diff एल्गोरिदम का उपयोग करके कार्यान्वित किया जाता है - नए कोड के खिलाफ सबसे हाल ही में जारी संस्करण diff। यदि उपयोगकर्ता सबसे हालिया संस्करण चला रहा है, तो आपको केवल diff को लागू करने की आवश्यकता है। सॉफ्टवेयर के खिलाफ विशेष रूप से अच्छी तरह से काम करता है, क्योंकि संकलित कोड आमतौर पर संस्करणों के बीच समान होता है। बेशक, यदि उपयोगकर्ता सबसे हालिया संस्करण नहीं चला रहा है तो आपको पूरी चीज को वैसे भी डाउनलोड करना होगा।


सामान्य द्विआधारी diff एल्गोरिदम के एक जोड़े कार्यान्वयन के होते हैं: bsdiff और xdelta अच्छा खुला स्रोत कार्यान्वयन हैं। मुझे .NET के लिए कोई कार्यान्वयन नहीं मिल रहा है, लेकिन चूंकि प्रश्न में एल्गोरिदम सुंदर प्लेटफ़ॉर्म-अज्ञेयवादी हैं, इसलिए यदि आप किसी प्रोजेक्ट की तरह महसूस करते हैं तो उन्हें पोर्ट करना मुश्किल नहीं होना चाहिए।

+0

मैं "हो सकता है" को प्रतिस्थापित करता हूं या कम से कम आमतौर पर होता है। –

2

यदि आप विंडोज अनुप्रयोगों को पैच करने के बारे में बात कर रहे हैं तो आप जो देखना चाहते हैं वह हैं .MSP फ़ाइलें। ये एक .MSI के समान हैं लेकिन केवल पैच और एप्लिकेशन हैं।

एमएसडीएन दस्तावेज़ों में Patching and Upgrading पर एक नज़र डालें।

क्या एक एमएसपी फाइलें अद्यतन अनुप्रयोगों को अद्यतन अनुप्रयोगों में लोड करती हैं। यह आमतौर पर अद्यतन डीएलएस और संसाधन फ़ाइलों को अद्यतन किया जाता है, लेकिन इसमें कोई भी फ़ाइल शामिल हो सकती है।

इंस्टॉल किए गए एप्लिकेशन को पैच करने के अलावा, सी: \ विन्डोज़ \ इंस्टॉलर में स्थित मरम्मत फ़ाइलों को भी अपडेट किया गया है। फिर यदि उपयोगकर्ता प्रोग्राम जोड़ें/निकालें से "मरम्मत" का चयन करता है तो अद्यतन पैच फ़ाइलों का भी उपयोग किया जाता है।

मुझे लगता है कि जॉन मिलिकिन द्वारा चर्चा की जाने वाली बाइनरी diff विधि अन्य ऑपरेटिंग सिस्टमों में उपयोग की जानी चाहिए। यद्यपि आप इसे विंडोज़ में काम कर सकते हैं, यह कुछ हद तक विदेशी होगा।

संबंधित मुद्दे