मैं वाईएक्स 3.7 पर हूं, और मुझे सरल < पैकेज समूह समूह आईडी = "नेटएफएक्स 40 वेब" /> बंडल तत्व काम करने के लिए नहीं मिल रहा है, क्योंकि यह नहीं लाता है नेट एफएक्स इंस्टॉलर पैकेज में, या setup.exe में एम्बेड करें। मैंने अपने Bundle.wxs
फ़ाइल में इसके लिए अपना स्वयं का पैकेज बनाने का सहारा लिया है, लेकिन मुझे अभी भी समस्या है। ऐसा लगता है कि .NET 4 को स्थापित करने का प्रयास हमेशा होता है, भले ही मशीन पहले से ही .NET स्थापित है।वाईएक्स बंडल में .NET इंस्टॉलर सहित पहले से स्थापित
मैं InstallCondition और DetectCondition के बीच अंतर की काफी यकीन नहीं है। मुझे लगता है कि इंस्टॉलकंडिशन का उपयोग पैकेज को स्थापित करने के लिए किया जाता है यदि मूल्यांकन सही है, अन्यथा इसे अनइंस्टॉल करें। यह उन चीज़ों के साथ कैसे काम करता है जो आमतौर पर स्थायी = हाँ, जैसे कि अधिकतर पूर्व-आवश्यकताएं हैं? DetectCondition लगभग विपरीत है, मुझे लगता है कि, यह जांचता है कि यह पहले से ही सिस्टम पर है, और यदि ऐसा है, तो इसे इंस्टॉल नहीं करता है।
नीचे अपना पूरा Bundle.wxs
फ़ाइल जो एक दृश्य स्टूडियो WiX Bootstrapper परियोजना में है। मैं रजिस्ट्री को देखने का प्रयास कर रहा हूं और .NET 4.0 रजिस्ट्री कुंजी से बाहर निकल रहा हूं। यदि यह मौजूद है, तो मैं .NET 4 स्थापित नहीं करना चाहता, और यदि यह वहां नहीं है, तो इसे इंस्टॉल करें। लेकिन, यह काम नहीं कर रहा है, और यह हमेशा .NET स्थापित करने का प्रयास करता है।
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Bundle
Name="MyProgramBootstrapper"
Version="1.0.0.0"
Manufacturer="Microsoft"
UpgradeCode="{2299B51D-9FD8-4278-90C8-2B79DB37F402}">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<Chain>
<PackageGroupRef Id="Netfx4Full"/>
<MsiPackage
Id="MyProgramInstaller"
SourceFile="$(var.MyProgramInstaller.TargetPath)"
Compressed="no"/>
</Chain>
</Bundle>
<Fragment>
<Property Id="NET40_FULL_INSTALL_32">
<RegistrySearch
Id ="SearchNet40_32bit"
Root="HKLM"
Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
Name="Version"
Type ="raw"/>
</Property>
<Property
Id="NET40_FULL_INSTALL_64">
<RegistrySearch
Id ="SearchNet40_64bit"
Root="HKLM"
Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
Name="Version"
Type ="raw"
Win64="yes" />
</Property>
<WixVariable
Id="WixMbaPrereqPackageId"
Value="Netfx4Full" />
<WixVariable
Id="WixMbaPrereqLicenseUrl"
Value="NetfxLicense.rtf" />
<PackageGroup
Id="Netfx4Full">
<ExePackage
Id="Netfx4Full"
Cache="no"
Compressed="no"
PerMachine="yes"
Permanent="yes"
Vital="yes"
SourceFile="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\DotNetFX40\dotNetFx40_Full_x86_x64.exe"
DetectCondition="NET40_FULL_INSTALL_32 OR NET40_FULL_INSTALL_64"
DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=164193"/>
</PackageGroup>
</Fragment>
</Wix>
Bootstrapper इंस्टॉलर लॉग:
[010C:2FB0][2013-05-10T12:07:07]w120: Detected partially cached package: Netfx4Full, invalid payload: Netfx4Full, reason: 0x80070570
[010C:2FB0][2013-05-10T12:07:07]i052: Condition 'NETFRAMEWORK40' evaluates to false.
[010C:2FB0][2013-05-10T12:07:07]w120: Detected partially cached package: MyInstaller, invalid payload: f4832BA0972BDE9B6FA8A19FBB614A7BA, reason: 0x80070570
[010C:2FB0][2013-05-10T12:07:07]i101: Detected package: Netfx4Full, state: Absent, cached: Partial
अद्यतन, समाधान के साथ। मैंने यह निर्धारित करने के लिए अंतर्निहित वाईएक्स रजिस्ट्रीशर्च का उपयोग किया है कि यह इंस्टॉल है या नहीं। मुझे अपने बंडल प्रोजेक्ट में WixUtilExtension.dll का संदर्भ देना पड़ा। यहां अपडेट किया गया Bundle.wxs:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
>
<Bundle
Name="MyProgramBootstrapper"
Version="1.0.0.0"
Manufacturer="Microsoft"
UpgradeCode="{2299B51D-9FD8-4278-90C8-2B79DB37F402}">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<Chain>
<PackageGroupRef Id="Netfx4Full"/>
<!-- TODO: Define the list of chained packages. -->
<!-- <MsiPackage SourceFile="path\to\your.msi" /> -->
<MsiPackage
Id="MyProgramInstaller"
SourceFile="$(var.MyProgramInstaller.TargetPath)"
Compressed="no" />
</Chain>
</Bundle>
<Fragment>
<util:RegistrySearchRef Id="NETFRAMEWORK40"/>
<PackageGroup
Id="Netfx4Full">
<ExePackage
Id="Netfx4FullExe"
Cache="no"
Compressed="no"
PerMachine="yes"
Permanent="yes"
Vital="yes"
SourceFile="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\DotNetFX40\dotNetFx40_Full_x86_x64.exe"
InstallCommand="/q /norestart /ChainingPackage FullX64Bootstrapper"
DetectCondition="NETFRAMEWORK40"
DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=164193"/>
</PackageGroup>
</Fragment>
</Wix>
अगर मैं आपके सवाल का सही ढंग से पढ़ा है, मुझे लगता है कि आपके प्रश्न के शीर्षक भ्रामक है । मुद्दा यह नहीं है कि 'WixNetfxExtension' काम करने में विफल रहा है। मुद्दा यह है कि आप ऐसा कुछ करना चाहते हैं जो आज 'WixNetfxExtension' द्वारा समर्थित नहीं है। दूसरों के लिए एक और वर्णनात्मक शीर्षक हो सकता है: "बंडल में संपीड़ित .NET Framework को कैसे शामिल करें"। अगर नीचे मेरा जवाब पूरी तरह से गलत है, तो इस टिप्पणी को नजरअंदाज करने के लिए स्वतंत्र महसूस करें। :) –
@RobMensching, सही, शीर्षक भ्रामक था। मैं एक्स्टेलर को एक्सई के पास ढीला/आसन्न करने में सक्षम हूं, जो मैं चाहता हूं। हालांकि, मेरी स्थितियों का पता लगाने में असफल रहा है कि .NET पहले से स्थापित है या नहीं, और मुझे यकीन नहीं है कि क्यों। –
प्रश्न में उत्तर जोड़ने के बजाय आप इसे एक उत्तर के रूप में भी जोड़ सकते हैं। यह बहुत समर्थित है Stackoverflow। (यह देखना मुश्किल है कि वास्तविक उत्तरों को ब्राउज़ करने की बजाय पूरी चीज़ को पढ़ने के बिना प्रश्न में एक एम्बेडेड उत्तर है) – Default