मेरे पास एक ऐसा उत्पाद है जिसमें कई विशेषताओं को शामिल किया जा सकता है जिन्हें विभिन्न स्थानों पर इंस्टॉल किया जा सकता है उदा। फ़ीचर 1 प्रोग्राम फ़ाइलों में एक निष्पादन योग्य स्थापित है और फ़ीचर 2 एक वेबसाइट है जो wwwroot में स्थापित है। हालांकि फ़ीचर 1 और फ़ीचर 2 दोनों एक ही डीएलएल पर भरोसा करते हैं और इसलिए उन सुविधाओं को आवश्यक है जो उन डीएलएस को 2 अलग-अलग स्थानों में स्थापित करने की आवश्यकता रखते हैं, जिन पर निर्भर करता है।विभिन्न स्थानों पर स्थापित सुविधाएं, लेकिन उसी घटक को संदर्भित करना
क्या प्रत्येक घटक को दो बार परिभाषित किए बिना इसे प्राप्त करने का कोई तरीका है?
मैं क्या हासिल करने की कोशिश कर रहा हूँ का एक और पूरा उदाहरण प्रदान करने के लिए निम्न पूरा wxs फ़ाइल का उपयोग कर संकलित किया जा सकता:
> candle.exe Foobar.wxs
> light.exe -ext WixUIExtension Foobar.wixobj
> msiexec/i Foobar.msi
<?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<Product Name='Foobar 1.0'
Id='E578DF12-DDE7-4BC2-82CD-FF11862862D5'
UpgradeCode='90F09DD5-E01B-4652-8971-515997730195'
Language='1033'
Codepage='1252'
Version='1.0.0'
Manufacturer='Acme Ltd.'>
<Package Id='*'
Keywords='Installer'
Description="Acme 1.0 Installer"
InstallerVersion='100'
Languages='1033'
Compressed='yes'
SummaryCodepage='1252' />
<Media Id='1' Cabinet='Sample.cab' EmbedCab='yes' DiskPrompt="CD-ROM #1" />
<Property Id='DiskPrompt' Value="Acme 1.0 Installation" />
<Directory Id='TARGETDIR' Name='SourceDir'>
<!-- Directory 1 (Program Files) -->
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="PROGRAM_INSTALLDIR" Name="Acme" />
</Directory>
<!-- Directory 2 (wwwroot) -->
<Directory Id="Inetpub" Name="Inetpub">
<Directory Id="wwwroot" Name="wwwroot">
<Directory Id="WEBSITE_INSTALLDIR" Name="AcmeWebSite" />
</Directory>
</Directory>
</Directory>
<DirectoryRef Id='PROGRAM_INSTALLDIR'>
<Component Id="Component1" Guid="79EC9E0B-8325-427B-A865-E1105CB16B62">
<File Id="File1" Name="File1.txt" Source="File1.txt" />
</Component>
</DirectoryRef>
<DirectoryRef Id='WEBSITE_INSTALLDIR'>
<Component Id="Component2" Guid="702E6573-8FBC-4269-A58D-FD1157111F0F">
<File Id="File2" Name="File2.txt" Source="File2.txt" />
</Component>
</DirectoryRef>
<Feature Id="Feature.Program"
Title="My Program"
TypicalDefault="install"
Level="1"
ConfigurableDirectory="PROGRAM_INSTALLDIR" >
<ComponentRef Id="Component1"/>
<ComponentRef Id="Component2"/>
</Feature>
<Feature Id="Feature.Website"
Title="My Website"
TypicalDefault="install"
Level="1"
ConfigurableDirectory="WEBSITE_INSTALLDIR" >
<ComponentRef Id="Component1"/>
<ComponentRef Id="Component2"/>
</Feature>
<UIRef Id="WixUI_Mondo" />
<UIRef Id="WixUI_ErrorProgressText" />
</Product>
</Wix>
हालांकि यह केवल File1.txt में
सी स्थापित किया जा रहा में परिणाम होगा: \ Program Files (x86) \ एक्मे
और केवल File2.txt में
_C स्थापित किया जा रहा: \ Inetpub \ wwwroot \ AcmeWebsite_
एक समाधान के रूप में दो बार घटकों को परिभाषित करने के लिए है:
<DirectoryRef Id='PROGRAM_INSTALLDIR'>
<Component Id="Component1" Guid="79EC9E0B-8325-427B-A865-E1105CB16B62">
<File Id="File1" Name="File1.txt" Source="File1.txt" />
</Component>
<Component Id="Component2" Guid="702E6573-8FBC-4269-A58D-FD1157111F0F">
<File Id="File2" Name="File2.txt" Source="File2.txt" />
</Component>
</DirectoryRef>
<DirectoryRef Id='WEBSITE_INSTALLDIR'>
<Component Id="Component1.Web" Guid="397E93AA-32FB-425A-A783-386E0CCA2357">
<File Id="File1.Web" Name="File1.txt" Source="File1.txt" />
</Component>
<Component Id="Component2.Web" Guid="5C3AFF06-3623-4524-A90B-72B46DE5572A">
<File Id="File2.Web" Name="File2.txt" Source="File2.txt" />
</Component>
</DirectoryRef>
<Feature Id="Feature.Program"
Title="My Program"
TypicalDefault="install"
Level="1"
ConfigurableDirectory="PROGRAM_INSTALLDIR" >
<ComponentRef Id="Component1"/>
<ComponentRef Id="Component2"/>
</Feature>
<Feature Id="Feature.Website"
Title="My Website"
TypicalDefault="install"
Level="1"
ConfigurableDirectory="WEBSITE_INSTALLDIR" >
<ComponentRef Id="Component1.Web"/>
<ComponentRef Id="Component2.Web"/>
</Feature>
लेकिन फिर क्या होता है यदि हम किसी अन्य स्थान पर स्थापित होने वाली तीसरी सुविधा जोड़ते हैं? क्या हमें फिर से हर घटक को फिर से परिभाषित करना है? 100 से अधिक घटकों के साथ, डुप्लिकेट घटकों का प्रबंधन एक बड़ा काम बन जाएगा।
कोई सुझाव?
किसी को भी इस समस्या को हल करने के लिए देख रहे किसी भी व्यक्ति के लिए, मैं इस [माइक्रोसॉफ्ट समर्थन आलेख] (http://support.microsoft.com/kb/837908) से विधि 3 का उपयोग कर समाप्त हुआ ताकि वेबसाइट इसे अपने डीएलएस लोड कर सके प्रोग्राम फ़ाइलें बिन स्थान से और वहां डीएलएस की एक प्रतिलिपि स्थापित की गई। केवल कुछ छोटी संख्या में डीएलएल को डुप्लिकेट करने की आवश्यकता होती है क्योंकि उन्हें असेंबली रिसोलव हैंडलर सेट करने से पहले वेब ऐप लोड करना आवश्यक होता है। हमारा सॉफ़्टवेयर थोड़ा अजीब है कि वेबसाइट बड़ी संख्या में डीएलएस से बड़ी संख्या में ऑब्जेक्ट्स लोड करने, डुप्लिकेट घटकों को परिभाषित करने या – Casey