Search code examples
wixlocaldbbootstrapperburnsql-server-2019

SqlLocalDB 2019 MSI ignores ARPSYSTEMCOMPONENT from Wix bootstrapper


I have a Wix Bootstrapper application which launches the SqlLocalDB 2019 MSI installer. It works great and everything is installed properly.

In the MsiPackage I'm passing ARPSYSTEMCOMPONET=0 to ensure that the "Microsoft Sql Server 2019 LocalDB" entry appears in Add/Remove Programs on Windows 10.

<?xml version="1.0" encoding="UTF-8"?>

<WixVariable Id="WixUILicenseRtf" Value="$(var.ProjectDir)\Resources\eula_en-us.rtf" />

<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
  <bal:WixStandardBootstrapperApplication LogoFile="$(var.ProjectDir)\Resources\cs.png"
    LicenseFile="$(var.ProjectDir)\Resources\eula_en-us.rtf" 
    ThemeFile="$(var.ProjectDir)\Resources\customtheme.xml"
    SuppressOptionsUI="yes" 
    SuppressRepair="yes" />

</BootstrapperApplicationRef>
<Chain>
  <MsiPackage Id="SqlLocalDBPackage" 
              DisplayName="Installing Prerequisites... :)" Vital="yes" Visible="yes" Permanent="yes"
              SourceFile="$(var.ProjectDir)\Resources\SqlLocalDB2019.msi" >
    <MsiProperty Name="ARPSYSTEMCOMPONENT" Value="0"/>
    <MsiProperty Name="IACCEPTSQLLOCALDBLICENSETERMS" Value="YES" />
  </MsiPackage>
 
</Chain>

the Logfile for the Sql Installer does show that ARPSYSTEMCOMPONENT=0 and SYSTEMCOMPONENT=0 within the SqlLocalDB2019 MSI installer.

MSI (s) (9C:EC) [10:13:12:576]: Command Line: MSIFASTINSTALL=7 ARPSYSTEMCOMPONENT=0 IACCEPTSQLLOCALDBLICENSETERMS=YES REBOOT=ReallySuppress CLIENTUILEVEL=3 MSICLIENTUSESEXTERNALUI=1 CLIENTPROCESSID=25032
MSI (s) (9C:EC) [10:13:24:346]: Executing op: ProductRegister(UpgradeCode={F0176A51-908A-4240-8853-E229D0AE3F39},VersionString=15.0.2000.5,HelpLink=https://go.microsoft.com/fwlink/?LinkId=230480,,,InstallSource=C:\ProgramData\Package Cache\{F4F4157C-0951-4F00-8530-E3A6B2BE8606}v15.0.2000.5\,Publisher=Microsoft Corporation,,,,,,,,,,,SystemComponent=0,EstimatedSize=264308,,,,)

however, in the Registry, it will always be set to 1 and the package does not appear in ARP. However, if I manually reset it to 0, it does appear.

enter image description here

Note that I have also tried setting ARPSYSTEMCOMPONENT to "YES", "NO", "1" and "0" and they all result in SystemComponent being 1 in the registry.

I'm stumped on this one....any ideas would be greatly appreciated.

TIA!


Solution

  • Remove:

    Remove this whole property from your source:

    <MsiProperty Name="ARPSYSTEMCOMPONENT" Value="0" />
    

    Visible Attribute:

    Ensure the Visible attibute is set to "yes" in the MsiElement:

    <MsiPackage Id="MyMSI" Visible="yes" SourceFile="Test.msi" />
    

    This setting will auto-magically handle the ARPSYSTEMCOMPONENT property writing. It seems to properly override anything specifically defined inside the third party MSI involved. Just did a smoke test.


    Custom Actions: It is possible for custom actions to do something weird and set this property or write to this registry location.