2012-10-24 12 views
5

में TARGETDIR को बदलना मुझे TARGETDIR पथ सेट करने में समस्याएं आ रही हैं। मैंने एक काम कर रहे एमएसआई फ़ाइल को रिवर्स इंजीनियर करने के लिए dark.exe का उपयोग किया और इस विषय पर मुझे मिली कोई भी पोस्ट पढ़ी, लेकिन मुझे ProgramFiles\Manufacturer\Product पथ को इंगित करने के लिए TARGETDIR सेट करने में असमर्थ लगता है। नीचे जो अपने आवेदन में परिणाम है मेरी WXS फ़ाइल की एक distilation किसी कारण से मेरी डी-ड्राइव की मूल करने के लिए स्थापित किया जा रहा है:वाईएक्स

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="*" 
      Name="FBL - Some App" 
      Language="1033" 
      Version="1.0.0.0" 
      Manufacturer="Foo &amp; Bar Limited" 
      UpgradeCode="780286c6-e064-4402-80d8-dd2c68b56c04"> 
     <Package InstallerVersion="200" 
       Compressed="yes" 
       InstallScope="perMachine" 
       Comments="Performs some operation that is important" /> 

     <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 
     <Media Id="1" Cabinet="App.1.0.0.cab" EmbedCab="yes" /> 
     <CustomAction Id="setTARGETDIR" 
         Property="TARGETDIR" 
         Value="[ProgramFilesFolder][Manufacturer]\[ProductName]" 
         Execute="firstSequence" 
         Return="check" /> 

     <Directory Id="TARGETDIR" Name="SourceDir"> 
      <Component Id="C__App.exe" 
         Guid="{074586E9-A675-2734-A4CD-1CE520922A41}"> 
       <File Id="F__App.exe" 
         Name="App.exe" 
         KeyPath="yes" 
         Assembly=".net" 
        AssemblyManifest="F__App.exe" 
         AssemblyApplication="F__App.exe" 
         DiskId="1" 
         Source="D:\SomePath\bin\Debug\App.exe" /> 
      </Component> 
     </Directory> 
     <Feature Id="DefaultFeature" ConfigurableDirectory="TARGETDIR" Level="1"> 
      <ComponentRef Id="C__App.exe" Primary="yes" /> 
     </Feature> 
     <Icon Id="favicon.ico" SourceFile="d:\SomePath\favicon.ico" /> 
     <Property Id="ARPPRODUCTICON" Value="favicon.ico" /> 
     <UI /> 
     <InstallExecuteSequence> 
      <Custom Action="setTARGETDIR" Before="CostFinalize" /> 
     </InstallExecuteSequence> 
    </Product> 
</Wix> 

मुझे यकीन है कि मैं कुछ सरल याद आ रही हूँ, लेकिन मैं किसी भी आगे नहीं मिल सकता है यहां से क्या करना है इसके बारे में जानकारी।

उत्तर

5

निम्न संशोधन की जरूरत थी:

<CustomAction Id="SetTARGETDIR" 
       Directory="TARGETDIR" 
       Value="[ProgramFilesFolder][Manufacturer]\[ProductName]" 
       Return="check" /> 

और

<InstallExecuteSequence> 
    <Custom Action="SetTARGETDIR" After="InstallValidate" /> 
</InstallExecuteSequence> 

स्पष्टीकरण: निर्देशिका का प्रयोग करें एक संपत्ति के बजाय विशेषता (यह एक प्रकार 35 कस्टम क्रिया है) और InstallValidate के बाद इस कार्रवाई द्वारा निर्धारित अवधि में निष्पादन अनुक्रम - वह तब होता है जब निर्देशिका को लेखन पहुंच के लिए चेक किया जाता है और वास्तव में सेट किया जाता है।

(Narina चंद्रशेखर के लिए धन्यवाद, इस पर जवाब के लिए WiX उपयोगकर्ता समूह से।)

2

यह अजीब है ... मैं एक ही मुद्दा था, लेकिन अपने जवाब मेरे लिए काम नहीं किया। सभी मैं जरूरत यह था:

<Product> 
    <SetProperty Id='TARGETDIR' Value='[ProgramFilesFolder][Manufacturer]\[ProductName]\' Before='FindRelatedProducts' /> 
    ... 
</Product> 

लेकिन तब फिर मैं अपने संस्थापक में कुछ और संपत्ति से TARGETDIR निर्देशिका की स्थापना हो सकती है लगता है; मैं कुछ विरासत सामग्री के साथ काम कर रहा था।

संपादित करें: असल में, यह एक बुरा विचार था। कई बार, इन कस्टम कार्यों में से कुछ को इंस्टॉलेशन प्रक्रिया के विभिन्न हिस्सों में बुलाया जा सकता है, इसलिए संपत्ति सेट करने के लिए कस्टम कार्रवाई जोड़ने के लिए यह बेहतर है।

यहाँ क्या मेरे लिए काम किया है:

<Product> 
    <CustomAction Id='SetTARGETDIR' Property='TARGETDIR' Value='[ProgramFilesFolder][Manufacturer]\[ProductName]\'/> 
    ... 
</Product> 
<InstallUISequence> 
    <Custom Action='SetTARGETDIR' Sequence='1'/> 
    ... 
</InstallUISequence> 
<AdminUISequence> 
    <Custom Action='SetTARGETDIR' Sequence='1'/> 
    ... 
</AdminUISequence> 
0

मुझे कुछ नहीं के लिए काम किया तो मैं क्या किया एक कमांड लाइन स्थापना निर्देशिका की संपत्ति स्थापित करने के साथ MSI चलाने के लिए है। डिफ़ॉल्ट रूप से मेरा कार्यक्रम सी ड्राइव करने के लिए स्थापित की जाएगी, लेकिन कभी कभी मैं इसे डी ड्राइव इसलिए यहाँ करने के लिए स्थापित किया जाना चाहता था मैं क्या किया है:

<Directory Id="TARGETDIR" Name="SourceDir"> 
      <Directory Id="ProgramFilesFolder"> 
       <Directory Id="APPLICATIONROOTDIRECTORY" Name="XServer">      
       </Directory> 
      </Directory> 
</Directory> 

यहाँ कमांड लाइन है:

XServer.msi/एल * वी log.log APPLICATIONROOTDIRECTORY = "डी: \ प्रोग्राम फ़ाइलें (x86) \ XServer"