2
votes

hi I have two MSI one for 86 bit and one for 64 bit and each MSI size is 60 MB so i want to create exe(Bootstrapper) with both MSI's with exe size 60-70 MB .

Issue:- Currently my exe(Bootstrapper ) size is 120 MB i want to reduce this to 60-70 MB with both Msi's

MY CODE

In Bootstrapper

<Chain>
      <PackageGroupRef Id="NetFx451Web"/>
      <ExePackage SourceFile="vstor_redist.exe" Vital="yes" Cache="yes" Compressed="no" Permanent="yes" 

                  InstallCommand="/q /norestart" 
                  RepairCommand="/q /norestart" 
                  UninstallCommand="/q /norestart" 
                  DetectCondition="VSTOR40" 
                   />
      <ExePackage SourceFile="vcredist_x86.exe" Vital="yes" Cache="yes" Compressed="no" Permanent="yes" 
                  DownloadUrl="http://downloads.mangoapps.com/pre/win/vcredist_x86.exe"
                  InstallCommand="/q /norestart" 
                  RepairCommand="/q /norestart" 
                  UninstallCommand="/q /norestart" 
                  DetectCondition="VCREDIST2012" 
                   />      
        <MsiPackage Id="MSI64" SourceFile="$(var.WixMFW_PerMachine.ProjectDir)bin\64\Release\MFWSetup_x64.msi" InstallCondition="(VersionNT64)" DisplayInternalUI="no">
          <MsiProperty Name="INSTALLFOLDER" Value="[InstallFolder]"/>
        </MsiPackage>      
        <MsiPackage Id="MSI86" SourceFile="$(var.WixMFW_PerMachine.ProjectDir)bin\86\Release\MFWSetup_x86.msi" InstallCondition="(NOT VersionNT64)" DisplayInternalUI="no">
          <MsiProperty Name="INSTALLFOLDER" Value="[InstallFolder]"/>
        </MsiPackage>
    </Chain>

IN MSI

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
  <Product Id="*" Name="Demo $(var.bitness)" Language="1033" Version="$(var.SetupVersionNumber)" Manufacturer="Demo " UpgradeCode="$(var.UpgradeCode)">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
    <CustomAction Id="DIRCA_TARGETDIR" Property="TARGETDIR" Value="[LocalAppDataFolder][Manufacturer]\[ProductName]" Execute="firstSequence" />
    <MajorUpgrade DowngradeErrorMessage="A newer version of Demo For Windows is already installed." />
    <Upgrade Id="$(var.UpgradeCode)">
      <UpgradeVersion Maximum="$(var.SetupVersionNumber)" Property="OLDPRODUCTFOUND" OnlyDetect="no" IncludeMinimum="yes" IncludeMaximum="no" Language="1033" />
      <UpgradeVersion Minimum="$(var.SetupVersionNumber)" Property="NEWPRODUCTFOUND" OnlyDetect="yes" IncludeMinimum="no" Language="1033" />
    </Upgrade>


    <?if $(var.Configuration) = ReleaseMSI ?> 
    <Media Id="1" Cabinet="Cab1.cab" EmbedCab="yes"></Media>
    <?if $(var.Platform) = x64 ?> 
    <Media Id="2" Cabinet="Cab2.cab" EmbedCab="yes"></Media>
    <?else ?> 
    <Media Id="3" Cabinet="Cab3.cab" EmbedCab="yes"></Media>
    <?endif ?> 
    <?else?> 
    <Media Id="1" Cabinet="Cab1.cab" EmbedCab="no"></Media>
    <?if $(var.Platform) = x64 ?> 
    <Media Id="2" Cabinet="Cab2.cab" EmbedCab="no"></Media>
    <?else ?> 
    <Media Id="3" Cabinet="Cab3.cab" EmbedCab="no"></Media>
    <?endif ?> 
    <?endif ?> 

Feature 
Directory 
Component example 
-- 
 <Component Id="comp_F7B6C4FB_A2AD_493C_8081_8DAC3298503B" Guid="156DA224-3EC3-490C-8BE4-192E93883F44" Permanent="no" SharedDllRefCount="no" Transitive="no"  Win64="$(var.Win64)" >
        <File Id="_93649A69_3915_4B81_B0CB_B0AB2807E6E6" DiskId="1" Hidden="no" ReadOnly="no" TrueType="no" System="no" Vital="yes" Name="CefSharp.dll" Source="..\Utility\externalReferences\CefSharp.dll" KeyPath="yes" />
      </Component>
--- 
Registrys 

  </Fragment>
</Wix>

But this is not working .. please help me.

All Files are comman in both x86 and x64 MSI the only different is

 <?if $(var.Platform) = x64 ?>
          <Component Id="SQLite" Win64="$(var.Win64)">
            <File Id="SQLite.Interop" Source="$(var.ExternalReferences)\x64\SQLite.Interop.dll" KeyPath="yes" DiskId="2"/>
          </Component>
          <Component Id="System.Data.SQLitecomp" Win64="$(var.Win64)">
            <File Id="System.Data.SQLite" Source="$(var.ExternalReferences)\x64\System.Data.SQLite.dll" KeyPath="yes" DiskId="2"/>
          </Component>
  <?else ?>
          <Component Id="SQLite86" Win64="$(var.Win64)">
            <File Id="SQLite.Interop" Source="$(var.ExternalReferences)\x86\SQLite.Interop.dll" KeyPath="yes" DiskId="3"/>
          </Component>
          <Component Id="System.Data.SQLitecomp" Win64="$(var.Win64)">
            <File Id="System.Data.SQLite" Source="$(var.ExternalReferences)\x86\System.Data.SQLite.dll" KeyPath="yes" DiskId="3"/>
          </Component>
1
vcredist_x86.exe is not including in the installerAnkur Tripathi
What proportion of each MSI is common to both MSIs?bradfordrg
Everything is common .. why I am creating 2 msi is because of registry entries and 1-2 file select as per Platform (x86 and x64)Ankur Tripathi
Where are the common files installed?bradfordrg
All files are common ... the only difference is for SQLite i edit the post please check the uncommon partAnkur Tripathi

1 Answers

2
votes

Suggest creating three MSIs:

  1. A common files MSI installing all of the common files to a platform independent location such as CommonAppDataFolder.
  2. A x64 platform MSI installing the 64 bit SQLLite files.
  3. A x86 platform MSI installing the 32 bit SQLLite files.

You can then change your Bootstrapper to always install MSI #1 and either MSI #2 or MSI #3 depending on the platform. Because the common files are no longer duplicated, this should reduce the overall size of your Bootstrapper.

<Chain>
  <PackageGroupRef Id="NetFx451Web"/>
  <ExePackage SourceFile="vstor_redist.exe" Vital="yes" Cache="yes" Compressed="no" Permanent="yes" 

              InstallCommand="/q /norestart" 
              RepairCommand="/q /norestart" 
              UninstallCommand="/q /norestart" 
              DetectCondition="VSTOR40" 
               />
  <ExePackage SourceFile="vcredist_x86.exe" Vital="yes" Cache="yes" Compressed="no" Permanent="yes" 
              DownloadUrl="http://downloads.mangoapps.com/pre/win/vcredist_x86.exe"
              InstallCommand="/q /norestart" 
              RepairCommand="/q /norestart" 
              UninstallCommand="/q /norestart" 
              DetectCondition="VCREDIST2012" 
               />      
    <MsiPackage Id="MSICommon" SourceFile="$(var.WixMFW_PerMachine.ProjectDir)bin\Release\MFWSetup_common.msi" DisplayInternalUI="no">
      <MsiProperty Name="INSTALLFOLDER" Value="[InstallFolder]"/>
    </MsiPackage>      
    <MsiPackage Id="MSI64" SourceFile="$(var.WixMFW_PerMachine.ProjectDir)bin\64\Release\MFWSetup_x64.msi" InstallCondition="(VersionNT64)" DisplayInternalUI="no">
      <MsiProperty Name="INSTALLFOLDER" Value="[InstallFolder]"/>
    </MsiPackage>      
    <MsiPackage Id="MSI86" SourceFile="$(var.WixMFW_PerMachine.ProjectDir)bin\86\Release\MFWSetup_x86.msi" InstallCondition="(NOT VersionNT64)" DisplayInternalUI="no">
      <MsiProperty Name="INSTALLFOLDER" Value="[InstallFolder]"/>
    </MsiPackage>
</Chain>