Zoli
Zoli

Reputation: 910

WiX Heat.exe generates different output after VS2008 -> VS2015 upgrade

We execute the following command line with heat (3.0.5210.0):

heat.exe -srd -suid file OurLib.dll -out bin_OurLib.tmp

OurLib.dll is a VC++ 2008 dll file, it's a COM component.

Output (bin_OurLib.tmp)

    <?xml version="1.0" encoding="utf-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
        <Fragment>
            <DirectoryRef Id="TARGETDIR">
                <Component Id="OurLib.dll" Guid="PUT-GUID-HERE">
                    <File Id="OurLib.dll" KeyPath="yes" Source="SourceDir\OurLib.dll">
                        <Class Id="{B1AB297C-1BC6-65E1-A7C1-A1833DFAED6A}" Context="InprocServer32" Description="OurProduct.OurLib">
                            <ProgId Id="OurProduct.OurLib" Description="OurProduct.OurLib" />
                        </Class>
                    </File>
                </Component>
            </DirectoryRef>
        </Fragment>
    </Wix>

This works fine. Now we updated the VS to 2015, and compiled OurLib with it. Running the same heat command now results in different output:

    <?xml version="1.0" encoding="utf-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
        <Fragment>
            <DirectoryRef Id="TARGETDIR">
                <Component Id="OurLib.dll" Guid="PUT-GUID-HERE">
                    <Class Id="{B1AB297C-1BC6-65E1-A7C1-A1833DFAED6A}" Context="InprocServer32" Description="OurProduct.OurLib">
                        <ProgId Id="OurProduct.OurLib" Description="OurProduct.OurLib" />
                    </Class>
                    <File Id="OurLib.dll" KeyPath="yes" Source="SourceDir\OurLib.dll" />
                    <RegistryValue Root="HKCR" Key="CLSID\{B1AB297C-1BC6-65E1-A7C1-A1833DFAED6A}\InProcServer32" Value="&quot;[#OurLib.dll]&quot;" Type="string" Action="write" />
                </Component>
            </DirectoryRef>
        </Fragment>
    </Wix>

And when wix is linking, it gives error:

error LGHT0130 : The primary key 'reg51A1FC16367511AF81E9B18CA009A1C6' is duplicated in table 'Registry'. Please remove one of the entries or rename a part of the primary key to avoid the collision.

Checking the wixobj file, reg51A1FC16367511AF81E9B18CA009A1C6 is related to line <Class Id="{B1AB297C-1BC6-65E1-A7C1-A1833DFAED6A}...." and <RegistryValue Root="HKCR" Key="CLSID\{B1AB.... - obviously.

Anwyay, this is obviously due to the generated wix output files are different. Why is that if compiling a dll with a newer C++ compiler will cause WIX HEAT to generate different output, while running the same options, etc.

And how can I have back the same "old" output, which we need.

Tried with -scom and -sreg, none of them gave back the "old" output.

Upvotes: 0

Views: 128

Answers (1)

tjleigh
tjleigh

Reputation: 1144

Well primary key duplicated means you've got that same RegistryValue in two different places in your wix source code somehow.

Or maybe the newer DLL is self-registering differently? It's putting the InProcServer32 value in quotes. I don't think that's normal.

Or have you checked that your 2008 and 2015 DLL source and project files are identical? The VS project upgrade process changes things...

Upvotes: 1

Related Questions