WIX 3: Using HEAT for Visual Basic 6 COM Dlls

I am using WIX 3. I used heat to create a wxs file for VB6 dll. Msi creates without errors, and the installation is also successful.

Everything seems fine, and I can successfully execute the component from the VB client.

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

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

I made a difference in the registry to find out what is the difference between self-registration (regsvr32) and the installer, and I see the following

  • All entries in the HKCR match - everything is fine here.
  • regsvr32 adds entries to HKLM, and the installer does not apply to HKLM

I am wondering if this is a problem, or am I completely mistaken.

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

Below is a 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" parameter for the file makes the ASP client also work. I read from other posts that this cannot be used. Can someone tell me what to do?

+5
source share
1 answer

In order for the installer to place entries in HKLM, the installation must be marked as perMachine, by default it is perUser, as shown below.

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

Once this is done, entries are included in HKCR as well as HKLM.

I hope someone finds this useful, took me for 6 hours.

+7
source

All Articles