9

如果不是自注册。那么我们如何在使用 WIX 安装时执行 COM dll 注册?

根据教程,我使用了 ComPlusApplication 示例(非 .net dll)。但它不起作用。它无法注册。

我可以从命令行成功使用 regsvr32 注册。我读到了关于不为注册 com dll 创建自定义操作的信息。

那么最好的方法是什么?如果我们需要使用heat,我们在哪里编写命令并将结果wxs添加到主项目中?

4

2 回答 2

20

我强烈建议使用 Wix 工具 Heat.exe 来收集注册 com 组件所需的所有数据,然后在 .wxs 文件中引用片段,如下所示:

    <ComponentGroupRef Id="FooBar.dll" />

或将其包含在您的 .wxs 文件中,如下所示:

    <?include FooBar.dll.wxi?>

此方法使您可以完全控制 Com 组件的注册/注销期间发生的情况。

但是,您仍然可以在 Wix 项目中使用 Regsvr32。但它依赖于 COM 组件中 RegisterServer/UnregisterServer 函数的正确实现

    <CustomAction Id="RegisterFooBar" 
                  Directory="INSTALLDIR" 
                  ExeCommand='regsvr32.exe /s "[INSTALLDIR]FooBar.dll"'> 
    </CustomAction> 
    <CustomAction Id="UnregisterFooBar" 
                  Directory="INSTALLDIR" 
                  ExeCommand='regsvr32.exe /s /u "[INSTALLDIR]FooBar.dll"'> 
    </CustomAction>

然后将您的操作添加到安装序列中。

    <InstallExecuteSequence> 
        <Custom Action="RegisterFooBar" After="InstallFinalize">NOT Installed</Custom>
        <Custom Action="UnregisterFooBar" After="InstallFinalize">REMOVE="ALL"</Custom>
    </InstallExecuteSequence>
于 2012-05-09T13:57:00.333 回答
2

您可以尝试使用 heat.exe 程序,然后在您的 wix 代码中引用该片段。

heat.exe 文件 -gg -out

如:

heat.exe 文件 my.dll -gg -out my.wxs

附言。添加 -gg 开关将生成 guid,否则如果您想手动添加它们可以跳过它。

于 2014-06-25T22:21:41.557 回答