使用wix工具集和BHO PLugin的加热工具集开发.msi文件

时间:2014-07-29 13:06:49

标签: c# dll wix bho heat

场景我为Internet Explorer 10插件创建了一个.dll文件。使用regasm我注册.dll并在IE10中正常工作。我想开发一个.msi文件,以便我可以分发它。我在开发它时遇到了一些问题。在安装过程中,dll文件应该在注册表中注册,但是文件永远不会被注册,但是没有.msi文件,如果只是注册.dll就可以正常工作。将.dll文件打包到.msi文件中时会发生此问题。我已经浏览了Wix文档,建议使用热工具集。以下是输出

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">


<Fragment>
    <DirectoryRef Id="TARGETDIR">
        <Directory Id="dirCFD54C07EFB094CAD317543172D62CC3" Name="bin" />
    </DirectoryRef>
</Fragment>
<Fragment>
    <DirectoryRef Id="dirCFD54C07EFB094CAD317543172D62CC3">
        <Component Id="cmpA742B1B0BA7235FA026C505929929E25" Guid="{A6A2DF10-0BC0-410d-    8582-79DA83A83F19}">
            <Class Id="{8A194578-81EA-4850-9911-13BA2D71EFBD}" Context="InprocServer32" Description="Greyhound.BHO.BHO" ThreadingModel="both" ForeignServer="mscoree.dll">
                <ProgId Id="Greyhound.BHO.BHO" Description="Greyhound.BHO.BHO" />
            </Class>
            <File Id="filB636C21F357A14C42DFD0FBC9300D2F4" KeyPath="yes" Source="SourceDir\bin\greyhound.dll" />
            <RegistryValue Root="HKCR" Key="CLSID\{8A194578-81EA-4850-9911-13BA2D71EFBD}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value="" Type="string" Action="write" />
            <RegistryValue Root="HKCR" Key="CLSID\{8A194578-81EA-4850-9911-13BA2D71EFBD}\InprocServer32\1.0.0.0" Name="Class" Value="Greyhound.BHO.BHO" Type="string" Action="write" />
            <RegistryValue Root="HKCR" Key="CLSID\{8A194578-81EA-4850-9911-13BA2D71EFBD}\InprocServer32\1.0.0.0" Name="Assembly" Value="Greyhound, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Type="string" Action="write" />
            <RegistryValue Root="HKCR" Key="CLSID\{8A194578-81EA-4850-9911-13BA2D71EFBD}\InprocServer32\1.0.0.0" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" />
            <RegistryValue Root="HKCR" Key="CLSID\{8A194578-81EA-4850-9911-13BA2D71EFBD}\InprocServer32\1.0.0.0" Name="CodeBase" Value="file:///[#filB636C21F357A14C42DFD0FBC9300D2F4]" Type="string" Action="write" />
            <RegistryValue Root="HKCR" Key="CLSID\{8A194578-81EA-4850-9911-13BA2D71EFBD}\InprocServer32" Name="Class" Value="Greyhound.BHO.BHO" Type="string" Action="write" />
            <RegistryValue Root="HKCR" Key="CLSID\{8A194578-81EA-4850-9911-13BA2D71EFBD}\InprocServer32" Name="Assembly" Value="Greyhound, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Type="string" Action="write" />
            <RegistryValue Root="HKCR" Key="CLSID\{8A194578-81EA-4850-9911-13BA2D71EFBD}\InprocServer32" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" />
            <RegistryValue Root="HKCR" Key="CLSID\{8A194578-81EA-4850-9911-13BA2D71EFBD}\InprocServer32" Name="CodeBase" Value="file:///[#filB636C21F357A14C42DFD0FBC9300D2F4]" Type="string" Action="write" />
            <RegistryValue Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\{8a194578-81ea-4850-9911-13ba2d71efbd}" Name="Alright" Value="1" Type="integer" Action="write" />
        </Component>
    </DirectoryRef>
</Fragment>

我对于在哪里将此输出包含到我的.wxs文件中感到困惑。即使生成上述文件,仍然存在注册.dll的问题。

如果有人可以对它有所了解,我们将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

要包含生成的输出,您只需在功能中添加ComponentRef

<ComponentRef Id="cmpA742B1B0BA7235FA026C505929929E25" />

您必须在candle命令中指定.wxs文件(包含产品和生成文件的文件),然后在light命令中生成.wixobj文件。

检查此链接以获取有关跨文件引用的更多信息: http://wix.tramontana.co.hu/tutorial/upgrades-and-modularization/fragments

在收获多个文件时,请考虑使用&#34; -cg ComponentGroupName&#34;标志与热。 有了它,您可以一次包括所有组件

<ComponentGroupRef Id="ComponentGroupName" />

关于未创建的注册表项,可能有多种原因。也许文件greyhound.dll已经在所需的位置。 Windows只会查看组件的密钥路径是否存在,如果它确实无法安装整个组件。

查看AppData \ Local \ Temp文件夹中的日志以获取更多信息