2009-09-04 20 views
5

Estoy usando WIX 3. He utilizado el calor para crear un archivo wxs para un dll VB6. El msi crea sin ningún error, y la instalación también es exitosa.WIX 3: Uso de HEAT para Visual Basic 6 COM Dlls

Todo parece estar bien, y puedo invocar el componente con éxito desde un cliente VB.

Sin embargo, si invoco el componente desde una página ASP, obtengo 0x800401f3.

Si en lugar del instalador, uso el autoregistro (regsvr32), ambos funcionan bien.

que hice una diferencia registro para averiguar cuál era la diferencia entre el inquilino (regsvr32) y el instalador, y veo el siguiente

  1. Todas las entradas en partido HKCR - todo bien aquí
  2. regsvr32 agrega entradas en HKLM, mientras que el instalador no toca HKLM

Me pregunto si este es el problema, o estoy completamente en una pista incorrecta.

MSDN (http://msdn.microsoft.com/en-us/library/ms694355(VS.85).aspx) menciona que se requieren entradas de registro en HKLM, preguntándose qué es lo que me falta aquí.

A continuación se muestra el archivo creado por 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> 

Actualización: El uso de la opción "SelfReg" para el archivo hace que el trabajo del cliente ASP también. Leí en otras publicaciones que esto no debe usarse. ¿Puede alguien decirme qué se debe hacer?

Respuesta

7

Para que el instalador coloque entradas en HKLM, la instalación debe estar marcada como perMachine, el valor predeterminado es perUser, como se muestra a continuación.

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

Una vez hecho esto, las entradas vienen en HKCR y también en HKLM.

Espero que alguien lo encuentre útil, me tomó unas buenas 6 horas ..

+0

+1 Justo lo que necesitaba. – bluekeys