2009-09-04 15 views
5

Używam WIX 3. Użyłem ciepła do utworzenia pliku wxs dla biblioteki dll VB6. Msi tworzy bez żadnych błędów, a instalacja również się powiodła.WIX 3: Używanie HEAT do Visual Basic 6 COM Dlls

Wszystko wydaje się być w porządku, i mogę pomyślnie wywołać komponent z klienta VB.

Jednak jeśli wywołuję komponent ze strony ASP, otrzymuję 0x800401f3.

Jeśli zamiast instalatora używam samodzielnej rejestracji (regsvr32), oba działają poprawnie.

Zrobiłem różnicę rejestru dowiedzieć się, jaka była różnica pomiędzy rejestracją własnej (regsvr32) i instalatora i widzę następujące

  1. Wszystkie wpisy w meczu HKCR - wszystko dobrze tutaj
  2. regsvr32 dodaje wpisy w HKLM, podczas gdy instalator nie dotyka HKLM

Zastanawiam się, czy to jest problem, czy jestem całkowicie na niewłaściwym torze.

MSDN (http://msdn.microsoft.com/en-us/library/ms694355(VS.85).aspx) wspomina, że ​​wpisy rejestru są wymagane w HKLM, zastanawiając się, czego tu brakuje.

Poniżej znajduje się plik utworzony przez ciepło.

<?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> 

Aktualizacja: Użycie opcji "SelfReg" dla pliku sprawia, że ​​praca klienta ASP, jak również. Czytałem z innych postów, że nie należy tego używać. Czy ktoś może mi powiedzieć, co należy zrobić?

Odpowiedz

7

Aby instalator mógł umieścić wpisy w HKLM, instalacja musi być oznaczona jako perMachine, domyślnie wydaje się, że jest to użytkownik perUser, jak to opisano poniżej.

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

Po wykonaniu tej czynności wpisy są w HKCR, a także w HKLM.

Mam nadzieję, że ktoś uzna to za przydatne, zabrał mi dobre 6 godzin ..

+0

+1 Właśnie tego potrzebowałem. – bluekeys

Powiązane problemy