How to Pass Parameters to Windows Installer Xml(WiX) Customization(Custom Action)

We will use sample product.wxs file again in this example

  1. Create an xml file: product.wxs (copied from wix.chm)  as below
    This wix file will create an MSI file to copy readme.txt into %sysdrv%/program files/test program/
    <?xml version='1.0'?>
    <WiX xmlns='http://schemas.microsoft.com/wix/2003/01/wi'>
       <Product Id='12345678-1234-1234-1234-123456789012' Name='Test Package' Language='1033'
                Version='1.0.0.0' Manufacturer='Microsoft Corporation'>
          <Package Id='12345678-1234-1234-1234-123456789012'
                    Description='My first Windows Installer package'
                    Comments='This is my first attempt at creating a Windows Installer database'
                    Manufacturer='Microsoft Corporation' InstallerVersion='200' Compressed='yes' />
     
          <Media Id='1' Cabinet='product.cab' EmbedCab='yes' />
     
          <Directory Id='TARGETDIR' Name='SourceDir'>
             <Directory Id='ProgramFilesFolder' Name='PFiles'>
                <Directory Id='MyDir' Name='TestProg' LongName='Test Program'>
                   <Component Id='MyComponent' Guid='12345678-1234-1234-1234-123456789012'>
                      <File Id='readme' Name='readme.txt' DiskId='1' src='readme.txt' />
                   </Component>
                </Directory>
             </Directory>
          </Directory>
     
          <Feature Id='MyFeature' Title='My 1st Feature' Level='1'>
             <ComponentRef Id='MyComponent' />
          </Feature>
          <InstallExecuteSequence>
             <Custom Action="test" Sequence='1'/>
          </InstallExecuteSequence>
    
          <Binary Id='Customization.vbs' src='Customization.vbs'/>
          <CustomAction Id='test' BinaryKey='Customization.vbs' VBScriptCall='Hello' Return='check'/>
       </Product>
    </WiX>
  2. Create a customization VBS code: Customization.vbs
                    function Hello
                       msgbox Session.Property("MYPARAM")
                    end function
    In the above VBS customization code, Session.Property is being used to retrieve to properties defined in your MSI. If the property MYPARAM is not defined in your wxs file, you can directly it as a command line parameter
    like below. MSI will automatically append it into its property list.
  3. Compile:
    c:\wix\candle product.wxs
  4. Link:
    c:\wix\light product.wixobj 
  5. Test your MSI:
    c:\wix\msiexec /i product.msi MYPARAM="WiX is cool."

    You will see the setup code pops up a dialog with the message "WiX is cool."

  6. You can control when the CustomAction should be run by using attributes: Before, After or Sequence. For example:
    
         <InstallExecuteSequence>
             <Custom Action="test" After='InstallFinalize'/>    Note: "test" will run after "InstallFinalize"
          </InstallExecuteSequence>
          
  7. You can also specify a condition for a custom action that should only be run at install or uninstall:
    $ComponentName > 2 Note: run at install
    $ComponentName = 2 Note: run at uninstall
    
         <InstallExecuteSequence>
             <Custom Action="test" After='InstallFinalize'><![CDATA[ $MyComponent > 2 ]]> </Custom>  
          </InstallExecuteSequence>
          

See also

  • Introduction to the Windows Installer XML(WiX) Toolset
  • MSI basics
  • WiX Tutorial - Steps to Create an MSI with Windows Installer XML(WiX)
  • How to Install a COM DLL with Windows Installer XML(WiX)
  • How to Add a License Agreement UI to Windows Installer XML(WiX)
  • How to Add Customization Code CustomAction to Windows Installer XML(WiX)
  • How to Reset Windows Service with Windows Installer XML(WiX)
  • How to Troubleshoot MSI Installation
  • How to Pass Parameters to the Customization Code(CustomAction)
  • How to Log Tracing Infomation to the Calling MSI from CustomAction
  • How to Invoke InstallUtil.exe to Call Your Managed Installer Class
  • How to Create a Website and Virtual Directory with Windows Installer XML(WiX)
  • How to Install Files to an Arbitrary Location Outside "Program Files"
  • How to Read Configuration Parameters from Xml File
  • How to Use Environmental Variables and WiX Preprocessor
  • Download WiXSharp



  • THIS POST IS PROVIDED "AS-IS" WITH NO WARRANTIES AND CONFERS NO RIGHTS. Build time: Sun 01/27/2008 . ©2007 Dalun Software. All rights reserved. Back to Article List