我正在使用WIX3。我已经花了很多时间为VB6 dll创建wxs文件。 msi创建时没有任何错误,并且安装也成功。
一切似乎都很好,我可以从VB客户端成功调用该组件。
但是,如果我从ASP页调用该组件,则会得到0x800401f3。
如果我使用自我注册(regsvr32)而不是安装程序,则两者都可以正常工作。
我做了注册表差异,以找出自我注册(regsvr32)和安装程序之间的区别,然后看到以下内容
我想知道这是问题所在,还是我完全走错了路。
MSDN(http://msdn.microsoft.com/en-us/library/ms694355(VS.85).aspx)提到HKLM中需要注册表项,想知道我在这里缺少什么。
以下是热量产生的文件。
<?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客户端也正常工作。我从其他帖子中读到,这将不被使用。有人可以告诉我该怎么做吗?
最佳答案
若要使安装程序将条目放置在HKLM下,必须将安装标记为perMachine,默认值似乎是perUser,如下所示。
<Package InstallScope="perMachine" InstallerVersion="200" Languages="1033" Compressed="yes" SummaryCodepage="1252" />
完成此操作后,条目将进入HKCR和HKLM。
我希望有人觉得这有用,花了我6个小时。
关于vb6 - WIX 3 : Using HEAT for Visual Basic 6 COM Dlls,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1379930/