私は WIX 3 を使用しています。heat を使用して VB6 dll の wxs ファイルを作成しました。msi はエラーなしで作成され、インストールも成功します。
すべて問題ないようで、VB クライアントからコンポーネントを正常に呼び出すことができます。
ただし、ASP ページからコンポーネントを呼び出すと、0x800401f3 が返されます。
インストーラーの代わりに自己登録 (regsvr32) を使用すると、どちらも正常に動作します。
自己登録(regsvr32)とインストーラーの違いを理解するためにレジストリの違いを調べたところ、次のように表示されました
- HKCR のすべてのエントリが一致します - ここでは問題ありません
- regsvr32 は HKLM にエントリを追加しますが、インストーラーは HKLM に触れません。
これが問題なのか、それとも完全に間違った方向に進んでいるのか疑問に思っています。
MSDN ( http://msdn.microsoft.com/en-us/library/ms694355(VS.85).aspx ) は、HKLM でレジストリ エントリが必要であると述べています。
以下は、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>
更新: ファイルに「SelfReg」オプションを使用すると、ASP クライアントも機能します。これは使用しないことを他の投稿から読みました。誰かが私に何をすべきか教えてもらえますか?