2009-09-04 24 views
5

Tôi đang sử dụng WIX 3. Tôi đã sử dụng nhiệt để tạo tệp wxs cho một dll VB6. Các msi tạo ra mà không có bất kỳ lỗi nào, và cài đặt cũng thành công.WIX 3: Sử dụng HEAT cho Visual Basic 6 COM Dlls

Tất cả có vẻ ổn, và tôi có thể gọi thành phần đó thành công từ ứng dụng khách VB.

Tuy nhiên, nếu tôi gọi thành phần từ trang ASP, tôi nhận được 0x800401f3.

Nếu thay vì trình cài đặt, tôi sử dụng tự đăng ký (regsvr32), cả hai đều hoạt động tốt.

tôi đã làm nên sự khác biệt registry để tìm ra sự khác biệt giữa đăng ký tự (regsvr32) và trình cài đặt là gì, và tôi thấy như sau

  1. Tất cả các mục trong trận đấu HKCR - tất cả cũng ở đây
  2. regsvr32 thêm mục vào HKLM, trong khi trình cài đặt không chạm HKLM

Tôi tự hỏi nếu đây là vấn đề hay tôi hoàn toàn theo dõi sai.

MSDN (http://msdn.microsoft.com/en-us/library/ms694355(VS.85).aspx) đề cập đến mục nhập sổ đăng ký được yêu cầu trong HKLM, tự hỏi tôi đang thiếu gì ở đây.

Sau đây là tệp được tạo bởi nhiệt.

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

Cập nhật: Sử dụng "SelfReg" tùy chọn cho File làm cho công việc của khách hàng ASP là tốt. Tôi đọc từ các bài viết khác mà điều này không được sử dụng. Ai đó có thể cho tôi biết phải làm gì không?

Trả lời

7

Để trình cài đặt đặt mục nhập dưới HKLM, cài đặt phải được đánh dấu là perMachine, mặc định có vẻ là perUser, như được thực hiện bên dưới.

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

Sau khi hoàn tất, các mục nhập vào HKCR và HKLM.

Tôi hy vọng ai đó thấy điều này hữu ích, đã dành cho tôi 6 giờ tốt ..

+0

+1 Chỉ cần những gì tôi cần. – bluekeys

Các vấn đề liên quan