2008-09-11 8 views
28

मैं WiX के साथ निर्मित इंस्टॉलेशन सेट (एमएसआई) में एक बड़ा अपग्रेड कैसे कर सकता हूं मूल स्थापना के समान फ़ोल्डर में स्थापित करें?उसी फ़ोल्डर में वाईएक्स स्थापना सेट अपग्रेड करें

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

क्या मुझे मैन्युअल कार्य करना है जैसे कि पहले स्थापित करने पर रजिस्ट्री कुंजी में स्थापना फ़ोल्डर को सहेजना और फिर अपग्रेड पर इस कुंजी को पढ़ना है? यदि हां, तो क्या कोई उदाहरण है?

या MSI या वाईएक्स में इसे प्राप्त करने के लिए कुछ आसान तरीका है?

संदर्भ के रूप में, मैं अपने वर्तमान WiX फ़ाइल के नीचे है: http://wix.tramontana.co.hu/tutorial/getting-started/where-to-install

<Property Id="INSTALLDIR"> 
    <RegistrySearch Id='AcmeFoobarRegistry' Type='raw' 
    Root='HKLM' Key='Software\Acme\Foobar 1.0' Name='InstallDir' /> 
</Property> 
बेशक

, आप रजिस्ट्री कुंजी सेट करने के लिए मिल गया है:

<?xml version="1.0" encoding="utf-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2003/01/wi"> 
    <Product Id="a2298d1d-ba60-4c4d-92e3-a77413f54a53" 
      Name="MyCompany Integration Framework 1.0.0" 
      Language="1033" 
      Version="1.0.0" 
      Manufacturer="MyCompany" 
      UpgradeCode="9071eacc-9b5a-48e3-bb90-8064d2b2c45d"> 

     <!-- Package information --> 
     <Package Keywords="Installer" 
       Id="e85e6190-1cd4-49f5-8924-9da5fcb8aee8" 
       Description="Installs MyCompany Integration Framework 1.0.0" 
       Comments="Installs MyCompany Integration Framework 1.0.0" 
       InstallerVersion="100" 
       Compressed="yes" /> 

     <Upgrade Id='9071eacc-9b5a-48e3-bb90-8064d2b2c45d'> 
      <UpgradeVersion Property="PATCHFOUND" 
          OnlyDetect="no" 
          Minimum="0.0.1" 
          IncludeMinimum="yes" 
          Maximum="1.0.0" 
          IncludeMaximum="yes"/> 
     </Upgrade> 

     <!-- Useless but necessary... --> 
     <Media Id="1" Cabinet="MyCompany.cab" EmbedCab="yes" /> 

     <!-- Precondition: .NET 2 must be installed --> 
     <Condition Message='This setup requires the .NET Framework 2 or higher.'> 
      <![CDATA[MsiNetAssemblySupport >= "2.0.50727"]]> 
     </Condition> 

     <Directory Id="TARGETDIR" 
        Name="SourceDir"> 
      <Directory Id="MyCompany" 
         Name="MyCompany"> 
       <Directory Id="INSTALLDIR" 
          Name="Integrat" 
          LongName="MyCompany Integration Framework"> 
        <Component Id="MyCompanyDllComponent" 
           Guid="4f362043-03a0-472d-a84f-896522ce7d2b" 
           DiskId="1"> 
         <File Id="MyCompanyIntegrationDll" 
           Name="IbIntegr.dll" 
           src="..\Build\MyCompany.Integration.dll" 
           Vital="yes" 
           LongName="MyCompany.Integration.dll" /> 
         <File Id="MyCompanyServiceModelDll" 
           Name="IbSerMod.dll" 
           src="..\Build\MyCompany.ServiceModel.dll" 
           Vital="yes" 
           LongName="MyCompany.ServiceModel.dll" /> 
        </Component> 

        <!-- More components --> 
       </Directory> 
      </Directory> 
     </Directory> 

     <Feature Id="MyCompanyProductFeature" 
       Title='MyCompany Integration Framework' 
       Description='The complete package' 
       Display='expand' 
       Level="1" 
       InstallDefault='local' 
       ConfigurableDirectory="INSTALLDIR"> 
      <ComponentRef Id="MyCompanyDllComponent" /> 
     </Feature> 

     <!-- Task scheduler application. It has to be used as a property --> 
     <Property Id="finaltaskexe" 
        Value="MyCompany.Integration.Host.exe" /> 
     <Property Id="WIXUI_INSTALLDIR" 
        Value="INSTALLDIR" /> 

     <InstallExecuteSequence> 
      <!-- command must be executed: MyCompany.Integration.Host.exe /INITIALCONFIG parameters.xml --> 
      <Custom Action='PropertyAssign' 
        After='InstallFinalize'>NOT Installed AND NOT PATCHFOUND</Custom> 
      <Custom Action='LaunchFile' 
        After='InstallFinalize'>NOT Installed AND NOT PATCHFOUND</Custom> 

      <RemoveExistingProducts Before='CostInitialize' /> 
     </InstallExecuteSequence> 

     <!-- execute comand --> 
     <CustomAction Id='PropertyAssign' 
         Property='PathProperty' 
      Value='[INSTALLDIR][finaltaskexe]' /> 
     <CustomAction Id='LaunchFile' 
         Property='PathProperty' 
         ExeCommand='/INITIALCONFIG "[INSTALLDIR]parameters.xml"' 
         Return='asyncNoWait' /> 

     <!-- User interface information --> 
     <UIRef Id="WixUI_InstallDir" /> 
     <UIRef Id="WixUI_ErrorProgressText" /> 
    </Product> 
</Wix> 

उत्तर

31

वहाँ WiX ट्यूटोरियल में एक उदाहरण है इंस्टॉल के हिस्से के रूप में भी। एक घटक है कि स्थापित मूल का हिस्सा है अंदर इस चिपका:

<RegistryKey 
     Key="Software\Software\Acme\Foobar 1.0" 
     Root="HKLM"> 
    <RegistryValue Id="FoobarRegInstallDir" 
      Type="string" 
      Name="InstallDir" 
      Value="[INSTALLDIR]" /> 
</RegistryKey> 
+0

मैंने इसे कार्यान्वित किया है और यह काम करता है। धन्यवाद दोस्त। –

+1

ट्यूटोरियल का लिंक बदल गया है: http://wix.tramontana.co.hu/tutorial/getting-started/where-to-install – marcin

+0

इसके लिए धन्यवाद, मुझे गलत विचार था कि केवल एक कुंजी का उपयोग किया गया था और यह प्रत्येक इंस्टॉलर द्वारा अद्यतन किया गया था। आपने मुझे अपने तरीकों की त्रुटि दिखा दी है: पी – TheGateKeeper

5

'रजिस्ट्री' मान्य नहीं है। अब कोड का वह हिस्सा इस तरह दिखना चाहिए:

<RegistryKey Id="FoobarRegRoot" 
      Action="createAndRemoveOnUninstall" 
      Key="Software\Software\Acme\Foobar 1.0" 
      Root="HKLM"> 
    <RegistryValue Id="FoobarRegInstallDir" 
       Type="string" 
       Name="InstallDir" 
       Value="[INSTALLDIR]" /> 
</RegistryKey> 
4

आप वास्तव में नहीं है इस तरह एक साधारण मामले में RegistryValue से RegistryKey अलग करने के लिए की जरूरत है। इसके अलावा, HKLM के बजाय HKMU का उपयोग करना इस पर ध्यान देता है कि आप मशीन या उपयोगकर्ता इंस्टॉल कर रहे हैं या नहीं।

<RegistryValue 
    Root="HKMU" 
    Key="Software\[Manufacturer]\[ProductName]" 
    Name="InstallDir" 
    Type="string" 
    Value="[INSTALLDIR]" 
    KeyPath="yes" /> 
+1

[निर्माता का उपयोग करने के लिए बोनस अंक ] और [ProductName] – William

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