c# - WiX इंस्टॉलर msi विजुअल स्टूडियो 2017 के साथ बनाए गए Winform ऐप को इंस्टॉल नहीं कर रहा है




winforms windows-installer (2)

"हैलो वाईएक्स" (पारदर्शी एल्यूमीनियम कृपया)

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

अद्यतन : नीचे मैंने एक ताजा वाईएक्स 3 विज़ुअल स्टूडियो प्रोजेक्ट से एमएसआई को संकलित करने का चरण-दर-चरण विवरण जोड़ा है।

वाईएक्स वास्तव में क्या है के लिए कुछ संदर्भ जानकारी के साथ यहां से एक और जवाब है: एमएसआई बनाम नगेट पैकेज: जो लगातार वितरण के लिए बेहतर हैं? । आपको "हैलो वर्ल्ड" का लिंक यहां भी मिलेगा, लेकिन कई अन्य लिंक भी।

सारांश में : वाईएक्स की "हैलो वर्ल्ड" पाने के लिए पहले लिंक की जांच करें। फिर परीक्षण स्रोत और recompile के एक जोड़े के साथ अपने स्रोत को अद्यतन करें। संकलित MSI फ़ाइलों को देखने में सक्षम होने के लिए आपको Orca (SDK टूल) को पकड़ना चाहिए। चूंकि आपके पास Visual Studio स्थापित है, इसलिए Orca-x86_en-us.msi और इसे स्थापित करें (यह Microsoft का अपना, आधिकारिक MSI दर्शक और संपादक है)। फिर प्रारंभ मेनू में ओर्का ढूंढें। तकनीकी रूप से ओर्का को विंडोज एसडीके (विजुअल स्टूडियो) के हिस्से के रूप में स्थापित किया गया है, लेकिन विंडोज एसडीके को विजुअल स्टूडियो इंस्टॉल के साथ बंडल किया गया है। एक बार जब आपके पास एक संकलित MSI फ़ाइल हो, तो बस उसे क्लिक करें और Edit with Orca चुनें।

इस तरह की फ़ाइल वास्तव में समझ में आने से पहले कुछ अनुभव की आवश्यकता होगी। संक्षेप में यह एक आदिम एमएस SQL ​​डेटाबेस है जो COM संरचित भंडारण फ़ाइल (OLE) में संग्रहीत है। मूल रूप से एक फाइल सिस्टम में अलग-अलग सामग्री (जैसे फाइलें, और डेटाटैबल्स, आदि ...) के लिए स्ट्रीम के साथ। बस इसे सामान्य संदर्भात्मक अखंडता के साथ एक डेटाबेस के रूप में सोचें और पहली बार File और Component जैसे मुख्य तालिकाओं पर ध्यान दें।

न्यूनतम वाईएक्स एमएसआई संकलन - चरण-दर-चरण

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

  1. एक नया वाईएक्स 3 प्रोजेक्ट बनाएं । तुम्हें पता है कि कैसे करना है, मैं विवरण के साथ समय बर्बाद नहीं करेंगे।

  2. Manufacturer विशेषता को अपनी कंपनी के नाम पर सेट करें। अब Name विशेषता के लिए अपने चयन का एक नया नाम सेट करें। इस नमूने में इसे MinimalTester में सेट किया MinimalTester - कृपया कुछ और का उपयोग करें।

  3. MSI में एम्बेडेड कैब फ़ाइलों का उपयोग करने के लिए <MediaTemplate EmbedCab="yes" /> <MediaTemplate /> से <MediaTemplate EmbedCab="yes" /> बदलें। इस तरह से केवल MSI बनाया जाता है और अतिरिक्त, बाहरी CAB फ़ाइल नहीं होती है।

  4. सीधे <UIRef Id="WixUI_Mondo" /> तत्व के बाद, इसे जोड़ें: <UIRef Id="WixUI_Mondo" /> । यह आपके MSI के लिए एक डिफ़ॉल्ट WiX संवाद सेट करेगा, ताकि इसके मूल रूप से जो उपयोगी हो उसे अधिक उपयोगी बनाने की आवश्यकता हो। अब आप मरम्मत चला सकते हैं, और संशोधित कर सकते हैं और आपको मूल इंस्टॉल के लिए एक विज़ार्ड मिल सकता है, जो कि इंस्टालेशन या उन्नत इंस्टॉलर या अन्य पेशेवर टूल से सबसे अधिक एमएसआई फाइलें प्रदान करता है। और महत्वपूर्ण रूप से: आपकी प्रशासनिक स्थापना में एक संवाद होगा जहां आप निर्दिष्ट कर सकते हैं कि फ़ाइलों को कहाँ निकाला जाना चाहिए।

  5. हम अपने स्वयं के लाइसेंस समझौते को वाईएक्स सेटअप में जोड़ देंगे (या फिर आपको एक डम्बल डिफ़ॉल्ट मिल जाएगा)। प्रत्यक्ष रूप से <UIRef Id="WixUI_Mondo" /> इस तत्व को जोड़ें: <WixVariable Id="WixUILicenseRtf" Value="TestLicenseAgreement.rtf" /> । अब फ़ाइल TestLicenseAgreement.rtf और इसे अपनी मुख्य वाईएक्स स्रोत फ़ाइल (त्वरित तरीके से: विजुअल स्टूडियो में, राइट क्लिक प्रोजेक्ट और "फ़ाइल एक्सप्लोरर में फ़ोल्डर खोलें" के रूप में उसी फ़ोल्डर में रखें, अब राइट क्लिक करें => आरटीएफ फ़ाइल बनाएँ) नई => आरटीएफ फ़ाइल। और शायद आरटीएफ खोलें और कुछ परीक्षण पाठ दर्ज करें)। संवादों का और अनुकूलन (बिटमैप और बहुत कुछ)।

  6. वाईएक्स संवाद सेट को डीएलई में परिभाषित किया गया है, हमें इसे संदर्भित करने की आवश्यकता है। अपने विज़ुअल स्टूडियो WiX प्रोजेक्ट में: Right click References => Add Reference... => Navigate to C:\Program Files (x86)\WiX Toolset v3.11\bin\ । डबल क्लिक करें WixUIExtension.dll और अंत में OK क्लिक करें।

  7. अब स्रोत के रूप में निर्दिष्ट एक निरपेक्ष पथ के साथ वाईएक्स में संभव न्यूनतम न्यूनतम घटक जोड़ें। यह सुनिश्चित करना है कि आप MSI संकलित कर सकते हैं। बाद में आप पथ को सापेक्ष या परिवर्तनशील बना सकते हैं (बस अब सीधे INSTALLFOLDER निर्देशिका तत्व के तहत इसे जोड़ें):

  <Component Feature="ProductFeature">
    <File Source="C:\Users\someone\SourceControl\MyProject\CoreApp.exe" />
  </Component>
  1. अंत में अपने समाधान में वाईएक्स प्रोजेक्ट पर राइट क्लिक करें और Build चुनें। और आप वाईएक्स प्रोजेक्ट पर राइट क्लिक करके और Open Folder in File Explorer क्लिक करके एमएसआई को जल्दी से चला सकते हैं। अब bin पर डबल क्लिक करें और फिर Debug (या रिलीज़ करें यदि आपने रिलीज़ बिल्ड पर स्विच किया है - तो सुनिश्चित नहीं है कि दो कॉन्फ़िगरेशन के बीच "डिफ़ॉल्ट अंतर क्या हैं)"। आपको डायलॉग सीक्वेंस में दूसरे डायलॉग में अपना खुद का लाइसेंस एग्रीमेंट देखना चाहिए।

बाद के वाईएक्स संस्करणों में उन विशेषताओं के लिए महान चूक हैं जो लगभग हमेशा "टेम्पलेट मान" पर सेट होती हैं या जहां दो विशेषताएँ अनिवार्य रूप से बेमानी हैं। बस उन्हें अपने स्रोत से बाहर छोड़ दें और वाईएक्स कंपाइलर को डिफ़ॉल्ट मानों के साथ जोड़ें। बहुत कम उपद्रव।

एक उदाहरण के रूप में: उपरोक्त तत्व में Component Id का अभाव है। संकलन के दौरान यह फ़ाइल तत्व के आईडी में चूक करता है। बदले में File element Id भी गायब है, और Source attribute (जो एक अनिवार्य विशेषता है) द्वारा निर्दिष्ट फ़ाइल नाम के लिए डिफ़ॉल्ट होगा।

हो सकता है कि इस उत्तर को लंबे विवरण और नीचे की ओर एक ठोस उदाहरण के लिए देखें: सिंटेक्स इन गैदरस इन विजिटर? एक बार जब आप कुछ विशेषताओं के सभी अतिरेक और दोहराव को समाप्त कर सकते हैं, तो आपकी वाईएक्स स्रोत फाइलें कितनी सरल हो सकती हैं? कम पाठ, कम कीड़े।

नमूना न्यूनतम वाईएक्स स्रोत - इनलाइन टिप्पणियाँ

नीचे दिए गए नमूने में घटक को डिफ़ॉल्ट घटक घटक में स्थानांतरित कर दिया गया है - इसलिए यह निर्दिष्ट करने की कोई आवश्यकता नहीं है कि यह किस विशेषता का है (इसके विपरीत)।

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <!--CHANGE 0: Set Manufacturer attribute to something, you must also specify a full GUID for UpgradeCode -->
  <Product Id="*" Name="MinimalTester" Language="1033" Version="1.0.0.0" Manufacturer="My Company" UpgradeCode="PUT-GUID-HERE">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

    <!--Standard: <MediaTemplate />-->
    <!--CHANGE #1: Enable embedded cab files, so there is only one file generated, the MSI file -->
    <MediaTemplate EmbedCab="yes" /> 

    <!--CHANGE #2: Add the following elements to link one of the default WiX GUI sequences and show the specified license agreement. The RTF file must be created and placed next to your WiX source file -->
    <UIRef Id="WixUI_Mondo" /> 
    <WixVariable Id="WixUILicenseRtf" Value="TestLicenseAgreement.rtf" />        

    <!--CHANGE #3: Add WiX dll reference. In Visual Studio WiX project: Right click References => Add Reference... => Navigate to C:\Program Files (x86)\WiX Toolset v3.11\bin\. Double click WixUIExtension.dll. Click OK -->

    <Feature Id="ProductFeature" Title="MinimalTester" Level="1">
      <ComponentGroupRef Id="ProductComponents" />
    </Feature>
  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="MinimalTester" />
      </Directory>
    </Directory>
  </Fragment>

  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">

      <!--CHANGE #4: Remove TODO elements, add the most basic component possible as illustrated below -->
      <Component>
        <File Source="C:\Users\someone\SourceControl\MyProject\CoreApp.exe" />
      </Component>

    </ComponentGroup>
  </Fragment>
</Wix>

संकलन और परीक्षण स्थापित करने का प्रयास करें। सामान्य सिस्टम पर C:\Program Files (x86)\MinimalTester इंस्टॉल होना चाहिए।

शायद यहां वाईएक्स ट्यूटोरियल के लिए और लिंक देखें: आगंतुक इंस्टॉलर WixUI डायलॉग की कस्टम छवि को सही ढंग से प्रदर्शित नहीं कर रहा है

एक साधारण परीक्षण के लिए मैंने निम्न के रूप में एक साधारण Winform एप्लिकेशन के लिए एक Wix इंस्टॉलर ऐप बनाया। लेकिन जब मैं इंस्टॉलर के साथ बनाई गई msi चलाता हूं तो यह सिर्फ एक सेकंड के लिए चलती है और Winform ऐप को इंस्टॉल किए बिना बाहर निकल जाती है। प्रश्न : यहाँ क्या मुद्दा हो सकता है? ऐसा लगता है कि मेरे Product.wxs फ़ाइल में कुछ गायब है। नोट : मैं VS2017 का उपयोग कर रहा हूं

मुद्दे का उत्पादन करने के लिए कदम

  1. here से Wix Toolset Visual Studio 2017 Extension स्थापित किया गया here और here से WiX 3.11 RC2 स्थापित करने के उनके निर्देशों का पालन किया गया here
  2. एक डिफ़ॉल्ट Winform project बनाया गया [बस एक एकल रूप इसमें जोड़ा नहीं गया]
  3. उसी समाधान में Toolset\v3\Setup Project टेम्पलेट का उपयोग करके Wix Setup project बनाया गया
  4. WiX सेटअप प्रोजेक्ट में Winform प्रोजेक्ट का संदर्भ जोड़ा गया है
  5. संपूर्ण समाधान का निर्माण किया।
  6. सेटअप प्रोजेक्ट पर राइट क्लिक किया और इसे फिर से बनाया, जिसने अपने \..bin\Debug फ़ोल्डर में एक .msi फ़ाइल बनाई
  7. चरण 6 से .msi फ़ाइल पर डबल क्लिक किया गया। फ़ाइल एक सेकंड के लिए चली गई, विंडोज़ 10 इंस्टॉलेशन डायलॉग दिखाई दिए (जैसा कि यह किसी भी इंस्टॉलेशन के लिए प्रकट होता है, यदि आप इस प्रोग्राम को स्थापित करना चाहते हैं) मैंने Yes क्लिक किया। इंस्टॉलर एक सेकंड के लिए फिर से भाग गया। लेकिन Winform ऐप इंस्टॉल नहीं किया गया था।

डिफ़ॉल्ट Product.wxs फ़ाइल [मैंने Manufacturer विशेषता के लिए मूल्य जोड़ने के अलावा यहां कुछ भी नहीं जोड़ा]

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="WiX_test_4_Winfrm" UpgradeCode="e69fe67b-5c28-4764-8196-a6613b840eff">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate />

        <Feature Id="ProductFeature" Title="SetupProject1" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>
    </Product>

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLFOLDER" Name="SetupProject1" />
            </Directory>
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
            <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
            <!-- <Component Id="ProductComponent"> -->
                <!-- TODO: Insert files, registry keys, and other resources here. -->
            <!-- </Component> -->
        </ComponentGroup>
    </Fragment>
</Wix>

इसे इस्तेमाल करे:

https://github.com/iswix-llc/iswix-tutorials

https://www.youtube.com/watch?v=nnV_OU6fk8c

अस्वीकरण: मैं IsWiX का अनुरक्षक हूं, एक FOSS WiX त्वरक जो आपके लिए WiX XML के भारी उठाने के लिए बहुप्रतीक्षित प्रोजेक्ट टेम्प्लेट (मचान) और चित्रमय डिज़ाइनर प्रदान करता है। जैसा कि आप वीडियो से देख सकते हैं, यह केवल कुछ ही मिनटों का काम है।







visual-studio-2017