2011-08-09 13 views
7

मैंने बूटस्ट्रैपर बनाया है, यह काम करता है लेकिन यह नेट फ्रेमवर्क 4.0 स्थापित नहीं करता है। स्थापना पूर्ण होने के बाद मेरा आवेदन शुरू नहीं होता है क्योंकि कोई नेट फ्रेमवर्क 4.0 नहीं है। यह नेटफ़ 4.0 इंस्टॉल क्यों नहीं करता है?स्थापना के हिस्से के रूप में .NET Framework 4.0 को कैसे स्थापित करें?

<ItemGroup> 
    <BootstrapperFile Include="Microsoft.Windows.Installer.4.5"> 
     <ProductName>Windows Installer 4.5</ProductName> 
    </BootstrapperFile> 
     <BootstrapperPackage Include=".NETFramework,Version=v4.0"> 
      <Visible>True</Visible> 
      <ProductName>.NET Framework 4.0</ProductName> 
      <Install>True</Install> 
     <Visible>True</Visible> 
     </BootstrapperPackage> 
    </ItemGroup> 
    <Import Project="$(WixTargetsPath)" /> 
    <Target Name="AfterBuild"> 
    <GenerateBootstrapper ApplicationFile="DOGInstaller.msi" 
    ApplicationName="DOG" 
    BootstrapperItems="@(BootstrapperFile)" 
    CopyComponents="True" 
    ComponentsLocation="HomeSite" 
    OutputPath="$(OutputPath)\en-us\" 
    Path="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper" 
    Culture="en" /> 
    </Target> 
+0

पथ प्रदान कर रहे हैं "C: \ प्रोग्राम फ़ाइलें (x86) \ माइक्रोसॉफ्ट SDKs \ Windows \ v7.0A \ Bootstrapper" केवल 64 बिट मशीनों के लिए लागू होगा, यह 32 बिट मशीनों पर नहीं चलेंगे –

+0

क्यों? मुझे क्या उपयोग करने की ज़रूरत है? – Oleg

+0

WIX में इसके लिए कोई समाधान नहीं है। मुझे भी एक ही समस्या थी, गुगलिंग के बाद और आरएनडी मैं इस जवाब के साथ आया –

उत्तर

0

मैं जाँच और पूर्व आवश्यक वस्तुएँ स्थापित करने के लिए dotnetinstaller इस्तेमाल किया। इसका बहुत आसान और उपयोग करने में आसान है। इसके अलावा यह एमएसआई को exe में परिवर्तित करने और यूएसी प्रॉम्प्ट को जोड़ने की सुविधा प्रदान करता है। आप फिर बाद निर्माण घटना में अपनी परियोजना में इस कोड को जोड़ना एक configuration file

की आवश्यकता है। यह आपकी एमएसआई और पूर्व-आवश्यक फ़ाइल को एम्बेड करेगा।

copy /Y "$(ProjectDir)Files\dotnetfx35setup.exe" "C:\Windows\Temp" 
copy /Y $(TargetPath) "C:\Windows\Temp" 
"$(SolutionDir)Tools\dotNetInstaller 2.0\Bin\installerLinker.exe" /o:"$(TargetDir)Setup.exe" /t:"$(SolutionDir)Tools\dotNetInstaller 2.0\Bin\dotNetInstaller.exe" /c:"$(ProjectDir)Files\Configuration.xml" /b:"$(ProjectDir)Files\banner.bmp" /Embed+ /Verbose+ 
+0

Thnx, लेकिन मेरे पास विक्स इंस्टॉलर प्रोजेक्ट है और केवल नेट फ्रेमवर्क इंस्टॉल करने की आवश्यकता है। – Oleg

+0

हाँ मैं सहमत हूं। कोड जो मैंने यहां प्रदान किया है केवल स्थापित करने के लिए है। नेट फ्रेमवर्क 4.0 –

3

आइटम समूह में मौजूद सभी आइटम एक ही नाम, "BootstrapperFile" की आवश्यकता है - वर्तमान में आप दो आइटम समूहों होगा, तो नेट फ्रेमवर्क (bootstrapper में शामिल नहीं किया जाएगा के रूप में यह एक अलग में है । दुर्भाग्य की निरंतरता - आइटम समूह "BootstrapperPackage" कहा जाता है

शुद्ध उपयोग "BootstrapperFile" या "BootstrapperPackage" पर सबसे अधिक उदाहरण हालांकि, नाम नहीं महत्वपूर्ण है, यह सिर्फ bootstrapper पीढ़ी कार्य के पैरामीटर के साथ लाइन अप करने के लिए किया जाता है कुछ मामलों में उदाहरण गलत धारणाओं का कारण बन सकते हैं :)

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

  • चेतावनी MSB3155:: आइटम '.NETFramework, संस्करण = v4.0' में 'नहीं ढूँढा जा सका'

    आप के रूप में MSBuild लॉग में यह देखेंगे। पता लगाने के लिए यह आपके bootstrapper के साथ मामला है

आसान तरीके हैं, कर रहे हैं:

  1. आपका उत्पन्न exe फ़ाइल असामान्य रूप से छोटा है - 300-400K का कहना है।
  2. अपने साथ MSI फ़ाइल हटाएँ, तो bootstrapper चलाने - यह एक लॉग फ़ाइल उत्पन्न होगा (जो यह एक त्रुटि संदेश में करने के लिए पथ प्रदान करता है)। लॉग फ़ाइल सूचीबद्ध करेगा कि कौन से पैकेज चेक किए गए थे (यह देखने के लिए कि क्या उन्हें निष्पादित करने की आवश्यकता है) - जो निष्पादित किया गया था उसके साथ। यदि आपका पैकेज सूची में नहीं था, तो संभवतः बूटस्ट्रैपर में नहीं है।
5

wixproj फ़ाइल में निम्नलिखित संरचना जोड़ें। ध्यान दें कि <WixTargetsPath> टैग पहले <PropertyGroup> नोड में रहते हैं, साथ ही बाकी के बाकी हिस्सों के साथ भी रहना चाहिए।

<Project> 
    <PropertyGroup> <!-- This must be the first PropertyGroup node. --> 
    ... 
    <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath> 
    <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath> 
    </PropertyGroup> 
    ... 
    <ItemGroup> 
    <BootstrapperFile Include="Microsoft.Windows.Installer.3.1"> 
     <ProductName>Windows Installer 3.1</ProductName> 
    </BootstrapperFile> 
    <BootstrapperFile Include=".NETFramework,Version=v4.0"> 
     <ProductName>Microsoft .NET Framework 4.0 (x86 and x64)</ProductName> 
    </BootstrapperFile> 
    </ItemGroup> 
    <PropertyGroup> 
    <BootstrapperPath>$(ProgramFiles)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\</BootstrapperPath> 
    </PropertyGroup> 
    <Target Name="AfterBuild"> 
    <GenerateBootstrapper 
     ApplicationFile="$(TargetFileName)" 
     ApplicationName="$(OutputName)" 
     BootstrapperItems="@(BootstrapperFile)" 
     ComponentsLocation="Relative" 
     CopyComponents="True" 
     OutputPath="$(OutputPath)" 
     Path="$(BootstrapperPath)" /> 
    </Target> 
</Product> 
+0

कोड का यह ब्लॉक विक्स प्रोजेक्ट फ़ाइल और एक .wxs फ़ाइल में संपादन दिखा रहा है। यह भ्रामक है। यह बंद टैग है। क्या यह होना चाहिए? –

+0

इसके अलावा, यह काम नहीं करता है। इंस्टॉलर की वर्तमान निर्देशिका में बूटस्ट्रैपर्स के लिए आईटी की लुकइन। –

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