WIX Heat fragment

Add-in Express™ Support Service
That's what is more important than anything else

WIX Heat fragment
Attempting to create WIX installer for VCL add in 
Matt Newnham




Posts: 13
Joined: 2010-11-23
I am attempting to follow the guide to creating a WIX installer from http://www.add-in-express.com/creating-addins-blog/2010/02/08/register-office-addin-wix/.

When I run the heat tool on my outlook add-in dll, I get the File and TypeLib elements and a number of RegistryValue values. However the RegistryValue entries appear to be linked to the ActiveX form I have in the dll for a taskpane. I don't get any RegistryValue entries to register the DLL with Outlook.

Checking the registry when I manually register the dll, I get a number of entries in the HKCR\Software\Microsoft\Outlook\Addins\ key for FriendlyName, Description etc. and also a number of sub-keys e.g. CommandBars. So when I run the installer, the dll gets registered, but does not get loaded by Outlook, presumabley because there is no registry entry in the \Microsoft\Outlook\Addins folder.

Is there something else i need to configure to get the add-in RegistryValue elements extracted via Heat?
Posted 14 Jan, 2011 09:59:46 Top
Dmitry Kostochko


Add-in Express team


Posts: 2875
Joined: 2004-04-05
Hi Matt,

Could you please show me (or send via email) all registry entries created by the heat.exe tool for your add-in? I will try to find out which registry entries are missing and will let you know.
Posted 17 Jan, 2011 04:24:42 Top
Matt Newnham




Posts: 13
Joined: 2010-11-23
Hi Dmitry,
Here's the fragment generated by heat:


<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="TARGETDIR">
<Directory Id="dirCFD54C07EFB094CAD317543172D62CC3" Name="bin" />
</DirectoryRef>
</Fragment>
<Fragment>
<DirectoryRef Id="dirCFD54C07EFB094CAD317543172D62CC3">
<Component Id="cmp0ED1EF7BD036CE4081EEDC33F6D42553" Guid="PUT-GUID-HERE">
<File Id="filD3C95C2CF17AF5C62864F08F2D95F024" KeyPath="yes" Source="SourceDir\bin\outlookclient.dll">
<TypeLib Id="{7812D7E6-3865-4F5C-930A-9C7D58D98F6C}" Control="yes" Description="OutlookClient Library" HelpDirectory="dirCFD54C07EFB094CAD317543172D62CC3" Language="0" MajorVersion="1" MinorVersion="0">
<Class Id="{1166D924-79F0-41AE-A0C3-5645BB0D9D52}" Context="InprocServer32" Description="frmAXKeywords Control" ThreadingModel="apartment" Version="1.0" Control="yes">
<ProgId Id="OutlookClient.frmAXKeywords" Description="frmAXKeywords Control" />
</Class>
<Class Id="{35109965-FCC3-4932-B423-2706F807237D}" Context="InprocServer32" Description="CoOutlookClient Object" ThreadingModel="apartment" Version="1.0">
<ProgId Id="OutlookClient.CoOutlookClient" Description="CoOutlookClient Object" />
</Class>
<Interface Id="{47DC2285-CFAC-4917-924A-326D8FD524B2}" Name="IfrmAXKeywordsEvents" ProxyStubClassId="{00020420-0000-0000-C000-000000000046}" ProxyStubClassId32="{00020420-0000-0000-C000-000000000046}" />
<Interface Id="{D989ACBF-01CE-48D3-8185-CCA4E8990C12}" Name="ICoOutlookClient" ProxyStubClassId="{00020424-0000-0000-C000-000000000046}" ProxyStubClassId32="{00020424-0000-0000-C000-000000000046}" />
<Interface Id="{E5D11B1C-AE9D-442B-8AD9-1C8D4F09AE09}" Name="IfrmAXKeywords" ProxyStubClassId="{00020424-0000-0000-C000-000000000046}" ProxyStubClassId32="{00020424-0000-0000-C000-000000000046}" />
</TypeLib>
</File>
<RegistryValue Root="HKCR" Key="CLSID\{1166D924-79F0-41AE-A0C3-5645BB0D9D52}\MiscStatus\1" Value="205201" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{1166D924-79F0-41AE-A0C3-5645BB0D9D52}\MiscStatus" Value="0" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{1166D924-79F0-41AE-A0C3-5645BB0D9D52}\ToolboxBitmap32" Value="[#filD3C95C2CF17AF5C62864F08F2D95F024],1" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{1166D924-79F0-41AE-A0C3-5645BB0D9D52}\Verb\0" Value="Properties,0,2" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{1166D924-79F0-41AE-A0C3-5645BB0D9D52}\Verb" Value="" Type="string" Action="write" />
</Component>
</DirectoryRef>
</Fragment>
</Wix>
Posted 18 Jan, 2011 05:23:30 Top
Dmitry Kostochko


Add-in Express team


Posts: 2875
Joined: 2004-04-05
Hi Matt,

Thank you. Please try to add the following 4 entries and test your WIX-based installation:

<RegistryValue Root="HKCU" Key="Software\Microsoft\Office\Outlook\AddIns\OutlookClient.CoOutlookClient" Name="FriendlyName" Value="FRIENDLY_NAME_OF_YOUR_ADDIN" Type="string" Action="write" />
<RegistryValue Root="HKCU" Key="Software\Microsoft\Office\Outlook\AddIns\OutlookClient.CoOutlookClient" Name="Description" Value="DESCRIPTION_OF_YOUR_ADDIN" Type="string" Action="write" />
<RegistryValue Root="HKCU" Key="Software\Microsoft\Office\Outlook\AddIns\OutlookClient.CoOutlookClient" Name="LoadBehavior" Value="3" Type="integer" Action="write" />
<RegistryValue Root="HKCU" Key="Software\Microsoft\Office\Outlook\AddIns\OutlookClient.CoOutlookClient" Name="CommandLineSafe" Value="0" Type="integer" Action="write" />
Posted 18 Jan, 2011 08:43:11 Top
Matt Newnham




Posts: 13
Joined: 2010-11-23
Hi Dmitry,
Thanks for your response. I have manually added the required registry entries to the XML, by comparing the entries created if I manually register the dll. This installer builds and works fine. I was just wondering why these entries don't get extracted by heat. Without the extraction from heat, I have to repeat the process of manually comparing registry entries each time I change add-in and need to build a new installer. Not a big problem, but would be nice, and less prone to errors, if heat generated the registry entries for me.

Thanks again,
Matt
Posted 18 Jan, 2011 09:10:49 Top
Dmitry Kostochko


Add-in Express team


Posts: 2875
Joined: 2004-04-05
Hi Matt,

I am sorry, I don't know why heat does not generate these entries for your project. I have created a simple test add-in for MS Outlook and got these entries extracted. I have WiX 3.0 installed, the file version of heat.exe is 3.0.5419.0 on my machine.

If I am not mistaken, WiX allows building an installation package from several script files, so you can include a fragment auto-generated by heat.exe in your main script file and modify your main script file by adding the missing registry entries.
Posted 18 Jan, 2011 10:21:55 Top
Matt Newnham




Posts: 13
Joined: 2010-11-23
Thanks for looking into it for me Dmitry.
I can ensure i get the correct registry settings by comparing the registry before and after registering the dll. It's pretty painless entering these via the WixEdit utility.
Thanks,
Matt
Posted 18 Jan, 2011 10:59:13 Top