Home > database >  Change the RootDrive in Xml with the path specified in .ini file
Change the RootDrive in Xml with the path specified in .ini file

Time:12-08

I am working on WIX Installer. I am trying to read Directory path from .ini file to XML. I have to red the path and get the files installed to that particular path.

    <Property Id="ROOTDRIVE">
        <![CDATA[*value which is read from .ini file has to be passed here*]]>
    </Property>
    <Property Id="MY_PROPERTY">
      <IniFileSearch Id="myIniSearch" Name="localtest.ini" Section="ENVIRONMENT" Key="LocalDirectory" Type="raw">
        <DirectorySearch Id="SPIniFilePath" Path="C:\">
          <FileSearch Id="SPIniFile" Name="localtest.ini"/>
        </DirectorySearch>
      </IniFileSearch> />
   </Property>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir" >
      <Directory Id="myIniSearch">
        <Directory Id="INSTALLFOLDER" Name="!(bind.property.ProductName)" />
      </Directory>
   </Directory>
  </Fragment>

localtest.ini is the .ini file. It is in the C drive

    [ENVIRONMENT]
    LocalDirectory=D:\Ng

Files should get installed to the path specified in .ini file. Following I added CustonAction. Still it gets installed in C drive

    <Property Id="MY_PROPERTY" Secure="yes">
      <IniFileSearch Id="myIniSearch" Name="localtest.ini" Section="ENVIRONMENT" Key="LocalDirectory" Type="raw">
        <DirectorySearch Id="SPIniFilePath" Path="C:\">
          <FileSearch Id="SPIniFile" Name="localtest.ini"/>
        </DirectorySearch>
      </IniFileSearch> 
    </Property>
<CustomAction Id="MyAction.SetProperty" Return="check" Property="MyAction" Value="[MY_PROPERTY]" />
<InstallExecuteSequence>
  <Custom Action="MyAction.SetProperty" After="AppSearch" />
</InstallExecuteSequence>
<DirectoryRef Id='MY_PROPERTY'>
  <Directory Id='INSTALLDIR_SimpleWebApp' Name='SimpleWebApp' />
</DirectoryRef>

CodePudding user response:

From your code it looks like MY_PROPERTY will be set to the directory found in the ini file (if found). In this case, schedule a type 51 custom action (after AppSearch) that sets 'INSTALLFOLDER' to the value "[MY_PROPERTY]!(bind.property.ProductName)" if MY_PROPERTY is not empty.

(I believe you can drop the ROOTDRIVE and myIniSearch properties)

  • Related