WIX 3 : Using HEAT for Visual Basic 6 COM Dlls

6

I am using WIX 3. I have used heat to create a wxs file for a VB6 dll. The msi creates without any errors, and the installation is successful as well.

All seems to be fine, and I can invoke the component successfully from a VB client.

However, if I invoke the component from an ASP page, I get 0x800401f3.

If instead of the installer, I use self registration (regsvr32), both work fine.

I did a registry difference to figure out what was the difference between self registration (regsvr32) and the installer, and I see the following

  1. All entries in HKCR match - all well here
  2. regsvr32 adds entries in HKLM, while the installer does not touch HKLM

I am wondering if this is the issue, or am I completely on a wrong track.

MSDN (http://msdn.microsoft.com/en-us/library/ms694355(VS.85).aspx) mentions that registry entries are required in HKLM, wondering what am I missing here.

Following is the file created by heat.

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="TARGETDIR">
            <Directory Id="dirAD70B10292EAB7CAC7171859FBB23AA9" Name="vbdll" />
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <DirectoryRef Id="dirAD70B10292EAB7CAC7171859FBB23AA9">
            <Component Id="cmp9D818C62A6239E8B51E971A0048D0C05" Guid="PUT-GUID-HERE">
                <File Id="filDD6F51EC5018EF4A9A312FFA6AC4257D" KeyPath="yes" Source="SourceDir\vbdll\act.dll">
                    <TypeLib Id="{80D8DA04-72C9-4D36-B269-57D989187ACF}" Description="act" HelpDirectory="dirAD70B10292EAB7CAC7171859FBB23AA9" Language="0" MajorVersion="1" MinorVersion="0">
                        <Class Id="{31BD65B6-9479-40EB-83C0-E717CD4793DD}" Context="InprocServer32" Description="act.def" ThreadingModel="apartment" Version="1.0" Programmable="yes">
                            <ProgId Id="act.def" Description="act.def" />
                        </Class>
                        <Interface Id="{C6D46026-CD7E-4AB0-B3B6-810FBF435BEF}" Name="def" ProxyStubClassId="{00020424-0000-0000-C000-000000000046}" ProxyStubClassId32="{00020424-0000-0000-C000-000000000046}" />
                    </TypeLib>
                </File>
                <RegistryValue Root="HKCR" Key="CLSID\{31BD65B6-9479-40EB-83C0-E717CD4793DD}\Implemented Categories\{40FC6ED5-2438-11CF-A3DB-080036F12502}" Value="" Type="string" Action="write" />
            </Component>
        </DirectoryRef>
    </Fragment>
</Wix>

Update : Using the "SelfReg" option for the File makes the ASP client work as well. I read from other posts that this is not to be used. Can someone tell me what's to be done?

vb6
wix
wix3
asked on Stack Overflow Sep 4, 2009 by (unknown user) • edited Jan 12, 2016 by Yan Sklyarenko

1 Answer

8

To get the installer to put entries under HKLM, the installation has to be marked as perMachine, the default seems to be perUser, as done below.

<Package InstallScope="perMachine" InstallerVersion="200" Languages="1033" Compressed="yes" SummaryCodepage="1252" />

Once this is done, the entries come in HKCR and also HKLM.

I hope somebody finds this useful, took me a good 6 hours..

answered on Stack Overflow Sep 4, 2009 by (unknown user)

User contributions licensed under CC BY-SA 3.0