tags:

views:

39

answers:

2

Hi,

I am creating an installer using WiX which contains few dlls. In the original script for each dll first gacutil.exe and then regasm is called. I am having problem when transfering this idea into WiX!!. Here is the code fragmanet for installing into GAC :

<Component Id="GMAG.Core.Serialization.dll" Directory="_2.2.8.0" Guid="{my_guid}"> <File Id="my.dll" Source="my_src" Assembly=".net" KeyPath="yes" Checksum="yes"/> </Component>

Now the question is how WiX will perform the assembly registration? My problem is:

  1. I cannot create another <File Id="my.dll" Source="my_src" KeyPath="yes"/> in the same component cause there must be only one keyPath="yes" attribute/component.
  2. Cannot put keyPath="yes" in component level as it breaks component reference counting system.
  3. Cannot create <File Id="my.dll" Source="my_src"/> without keyPath="Yes" as it generates compilation error.
  4. Cannot create a seperate component as two components will try to install same file!!.

I know I don't need to call regasm or regsvr32 when using heat. In a component code :<File Id="my.dll" Source="my_src" KeyPath="yes"/> should be enough for the registration. I am using heat and now I am stuck as I have to do assembly registration also.

Please help me to overcome the situation.

Regards,

Ashraf706

A: 

Assembly=".net" will put you assembly in the GAC, you will then need registry keys for the COM registration. If you run Heat against your assembly it should generate the code fragment you require.

Neil Sleightholm
A: 

That's how we register DLL in GAC via WIX 3.5:

<Component Id="Level0GAC" Guid="21735A8C-DD0C-4f4e-8AB5-B5BB8C55726B" DiskId='1'>
                    <File Id='Level0' Name='DLLFileName.dll' DiskId='1' KeyPath="yes"
                      Source='DLLFileName.dll'
                      Checksum="yes" Assembly=".net" AssemblyManifest="Level0">
                    </File>
</Component>

Indeed, there can be only one file inside a Component with a KeyPath set ot "yes", that's why for several DLLs you should create several Components.

26071986