在wix中注册com-dll
如果不是自动注册。那么,在使用WIX进行安装时,如何执行COM dll注册 根据,我使用了ComPlusApplication示例(非.NETDLL)。但它不起作用。它没有注册 我可以从命令行使用regsvr32成功注册。 我读过关于不创建用于注册com DLL的自定义操作的内容 那么,最好的方法是什么?在wix中注册com-dll,com,wix,wix3.5,wix3,heat,Com,Wix,Wix3.5,Wix3,Heat,如果不是自动注册。那么,在使用WIX进行安装时,如何执行COM dll注册 根据,我使用了ComPlusApplication示例(非.NETDLL)。但它不起作用。它没有注册 我可以从命令行使用regsvr32成功注册。 我读过关于不创建用于注册com DLL的自定义操作的内容 那么,最好的方法是什么? 如果我们需要使用heat,我们应该在哪里编写命令并将结果wxs添加到主项目中 我强烈建议使用Wix工具Heat.exe获取注册com组件所需的所有数据,然后在.wxs文件中引用片段,如下所示:
如果我们需要使用heat,我们应该在哪里编写命令并将结果wxs添加到主项目中 我强烈建议使用Wix工具Heat.exe获取注册com组件所需的所有数据,然后在.wxs文件中引用片段,如下所示:
<ComponentGroupRef Id="FooBar.dll" />
<?include FooBar.dll.wxi?>
或者将其包含在.wxs文件中,如下所示:
<ComponentGroupRef Id="FooBar.dll" />
<?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>
未安装
REMOVE=“全部”
您可以尝试使用heat.exe程序,然后在wix代码中引用片段
heat.exe文件-gg-out
例如:
heat.exe文件my.dll-gg-out my.wxs
Ps.添加-gg开关将生成GUID,否则如果您想手动添加它们,可以跳过它。我使用heat工具生成并将输出复制到我的.wxs文件。@rakheep:如果您发现一个有用的答案,请向上投票。当您收到一个或多个正确答案时,请选择最佳答案。上面的帖子中似乎缺少“取消注册”命令。当我无法使用heat为1个特定dll提取注册表信息时,我也不得不使用此方法。在一个特定的项目中为除1之外的所有人工作。@ColeW我添加了“注销”命令,谢谢!下面是我在处理自注册DLL时学到的另一个技巧。如果您设法找到安装所述dll的msi或msm(例如,从第三方分发服务器,您可以使用Dark.exe Wix工具提取描述msm的.wxs文件。然后,您可以在那里查找所需dll的描述。使用自定义操作起初看起来很优雅。但它依赖于COM组件中RegisterServer/UnregisterServer函数的正确实现更安全的方法是用<代码>热GG<代码>创建注册表信息。我建议强调你的答案中看起来像是一个旁注。尽管你要求登记的方式,你可以考虑不登记COM组件。免注册的COM模型允许你使用COM DLL而不需要触摸注册表。