installer - वाईएक्स इंस्टॉलर अपग्रेड कैसे कार्यान्वित करें?




wix windows-installer (8)

काम पर हम स्थापना पैकेज बनाने के लिए WiX का WiX करते हैं। हम चाहते हैं कि उत्पाद एक्स की स्थापना उस मशीन के उस उत्पाद के पिछले संस्करण की स्थापना रद्द करेगी।

मैंने इंटरनेट पर कई स्थानों पर एक बड़े अपग्रेड के बारे में पढ़ा है लेकिन इसे काम नहीं कर सका। क्या कोई भी कृपया उन सटीक चरणों को निर्दिष्ट कर सकता है जिन्हें मुझे पिछले संस्करण सुविधा को वाईएक्स में अनइंस्टॉल करने के लिए लेने की आवश्यकता है?


अंततः मुझे एक समाधान मिला - मैं इसे अन्य लोगों के लिए यहां पोस्ट कर रहा हूं जिनके पास एक ही समस्या हो सकती है (आप सभी 5)

  • उत्पाद आईडी को *
  • उत्पाद के तहत निम्नलिखित जोड़ें:

    <Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />
    <Upgrade Id="YOUR_GUID">  
       <UpgradeVersion
          Minimum="1.0.0.0" Maximum="99.0.0.0"
          Property="PREVIOUSVERSIONSINSTALLED"
          IncludeMinimum="yes" IncludeMaximum="no" />
    </Upgrade> 
    
  • InstallExecuteSequence के तहत जोड़ें:

    <RemoveExistingProducts Before="InstallInitialize" /> 
    

अब से जब भी मैं उत्पाद इंस्टॉल करता हूं, यह पिछले स्थापित संस्करणों को हटा देता है।

नोट: अपग्रेड आईडी को अपने स्वयं के GUID के साथ बदलें


आप इसे वाईएक्स-उपयोगकर्ता मेलिंग सूची पर बेहतर पूछ सकते हैं।

विंडोज इंस्टालर क्या कर रहा है इसकी दृढ़ समझ के साथ वाईएक्स का सबसे अच्छा उपयोग किया जाता है। आप " विंडोज इंस्टालर के लिए परिभाषित मार्गदर्शिका " प्राप्त करने पर विचार कर सकते हैं।

मौजूदा उत्पाद को http://msdn.microsoft.com/en-us/library/aa371197.aspx । क्योंकि इसके परिणामस्वरूप यह निर्धारित करता है कि यह कहां निर्धारित है - अर्थात्, क्या विफलता पुराने उत्पाद को पुनर्स्थापित करने का कारण बनती है, और क्या अपरिवर्तित फ़ाइलों को दोबारा कॉपी किया गया है - आपको इसे स्वयं निर्धारित करना होगा।

RemoveExistingProducts सिस्टम पर सभी स्थापित उत्पादों के UpgradeCode ( <Product> UpgradeCode <Product> तत्व में निर्दिष्ट) में @Id विशेषता से मिलान करने, वर्तमान स्थापना में तत्वों को <Upgrade>UpgradeCode संबंधित उत्पादों के परिवार को परिभाषित करता है। कोई भी उत्पाद जिसमें यह अपग्रेडकोड ​​है, जिसका संस्करण निर्दिष्ट सीमा में आता है, और जहां UpgradeVersion/@OnlyDetect विशेषता no (या छोड़ी गई है) को हटा दिया जाएगा।

RemoveExistingProducts लिए प्रलेखन UPGRADINGPRODUCTCODE प्रॉपर्टी को सेट करने का उल्लेख करता है। इसका मतलब यह है कि हटाए जा रहे उत्पाद के लिए अनइंस्टॉल प्रक्रिया उस संपत्ति को प्राप्त करती है, जिसका मूल्य Product/@Id लिए Product/@Id है।

यदि आपकी मूल स्थापना में UpgradeCode शामिल नहीं है, तो आप इस सुविधा का उपयोग करने में सक्षम नहीं होंगे।


थोड़ी देर के लिए ट्यूटोरियल्स से मुझे एक महत्वपूर्ण बात याद आई ( http://www.tramontana.co.hu/wix/lesson4.php से चोरी) जिसके परिणामस्वरूप "इस उत्पाद का एक और संस्करण पहले से स्थापित है" त्रुटियां:

* छोटे अपडेट का अर्थ है एक या कुछ फाइलों में छोटे बदलाव जहां परिवर्तन उत्पाद संस्करण (major.minor.build) को बदलने की गारंटी नहीं देता है। आपको उत्पाद GUID को बदलने की ज़रूरत नहीं है, या तो। ध्यान दें कि जब आप एक नई .msi फ़ाइल बनाते हैं तो आपको हमेशा पैकेज GUID को बदलना होगा जो किसी भी सम्मान में पिछले से अलग है। इंस्टॉलर आपके स्थापित प्रोग्राम का ट्रैक रखता है और उन्हें पता चलता है जब उपयोगकर्ता इन GUID का उपयोग करके इंस्टॉलेशन को बदलना या निकालना चाहता है। विभिन्न पैकेजों के लिए एक ही GUID का उपयोग इंस्टॉलर को भ्रमित कर देगा।

छोटे अपग्रेड उन परिवर्तनों को दर्शाते हैं जहां उत्पाद संस्करण पहले ही बदल जाएगा। उत्पाद टैग के संस्करण विशेषता को संशोधित करें। उत्पाद वही रहेगा, इसलिए आपको उत्पाद GUID को बदलने की आवश्यकता नहीं है, लेकिन, ज़ाहिर है, एक नया पैकेज GUID प्राप्त करें।

प्रमुख उन्नयन महत्वपूर्ण परिवर्तनों को दर्शाता है जैसे कि एक पूर्ण संस्करण से दूसरे में जा रहा है। सब कुछ बदलें: संस्करण विशेषता, उत्पाद और पैकेज GUIDs।


नवीनतम संस्करणों में (3.5.1315.0 बीटा से), आप अपने आप का उपयोग करने के बजाय मेजर अपग्रेड तत्व का उपयोग कर सकते हैं।

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

<MajorUpgrade
    AllowDowngrades="no" DowngradeErrorMessage="!(loc.NewerVersionInstalled)"
    AllowSameVersionUpgrades="no"
    />

नीचे मेरे लिए काम किया।

<Product Id="*" Name="XXXInstaller" Language="1033" Version="1.0.0.0" 
    Manufacturer="XXXX" UpgradeCode="YOUR_GUID_HERE">
<Package InstallerVersion="xxx" Compressed="yes"/>
<Upgrade Id="YOUR_GUID_HERE">
    <UpgradeVersion Property="REMOVINGTHEOLDVERSION" Minimum="1.0.0.0" 
        RemoveFeatures="ALL" />
</Upgrade>
<InstallExecuteSequence>
    <RemoveExistingProducts After="InstallInitialize" />
</InstallExecuteSequence>

कृपया सुनिश्चित करें कि उत्पाद में अपग्रेड कोड अपग्रेड में आईडी से मेल खाता है।



मैंने WiX दस्तावेज, डाउनलोड किए गए उदाहरण पढ़े, लेकिन मुझे अभी भी उन्नयन के साथ बहुत सारी समस्याएं थीं। छोटे अपग्रेड उन अनइंस्टॉल को निर्दिष्ट करने की संभावना के बावजूद पिछले उत्पादों की अनइंस्टॉल निष्पादित नहीं करते हैं। मैंने जांच के लिए एक दिन और अधिक खर्च किया और पाया कि वाईएक्स 3.5 ने उन्नयन के लिए एक नया टैग तैयार किया है। उपयोग यहां है:

<MajorUpgrade Schedule="afterInstallInitialize" DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." AllowDowngrades="no" />

लेकिन समस्याओं का मुख्य कारण यह था कि दस्तावेज छोटे और छोटे उन्नयन के लिए " पुन: स्थापित करें = सभी पुनर्नवीनीकरण = vomus " पैरामीटर का उपयोग करने के लिए कहता है, लेकिन यह नहीं कहता कि उन पैरामीटर प्रमुख उन्नयन के लिए फॉरबिडेन हैं - वे बस काम करना बंद कर देते हैं। तो आपको उन्हें बड़े उन्नयन के साथ उपयोग नहीं करना चाहिए।


मैंने वाईएक्स अपग्रेड के बारे में मूल बातें समझने में मेरी सहायता के लिए इस साइट का उपयोग किया:

http://wix.tramontana.co.hu/tutorial/upgrades-and-modularization

बाद में मैंने एक नमूना इंस्टॉलर बनाया, (एक परीक्षण फ़ाइल स्थापित की), फिर अपग्रेड इंस्टॉलर बनाया (2 नमूना परीक्षण फाइल स्थापित)। यह आपको बुनियादी समझ देगा कि तंत्र कैसे काम करता है।

और जैसा कि माइक ने अप्रेस, "द डिफिनिटिव गाइड टू विंडोज इंस्टालर" की पुस्तक में कहा था, यह आपको समझने में मदद करेगा, लेकिन यह वाईएक्स का उपयोग करके लिखा नहीं गया है।

एक और साइट जो बहुत उपयोगी थी वह यह थी:

http://www.wixwiki.com/index.php?title=Main_Page