我正在创建一个WIX安装程序项目。安装的部分工作是注册一些COM组件。我(希望)通过使用heat.exe生成COM组件声明成功,尽管我需要在生成wxs文件后稍微修改一下。为了说清楚,我在这里粘贴我的COM组件声明:
<ComponentGroup Id="COMComponent" Directory="INSTALLDIR">
<Component Id="COMDll" Guid="MY_GUID1">
<Class Id="{MY_CLASSID1}" Context="InprocServer32" Description="DESCRIPTION1" ThreadingModel="both" ForeignServer="mscoree.dll">
<ProgId Id="MYID1" Description="DESCRIPTION1" />
</Class>
...
<File Id="FILE_ID_1" KeyPath="yes" Source="MY_COM.dll" />
<File Id="FILD_ID2" KeyPath="no" Source="MY_COM.tlb">
<TypeLib Id="{xxx}" Description="xxx" HelpDirectory="INSTALLDIR" Language="0" MajorVersion="525" MinorVersion="0">
<Interface Id="{xxx}" Name="xxx" ProxyStubClassId32="{00020424-0000-0000-C000-000000000046}" />
...
</TypeLib>
</File>
<ProgId Id="Record" />
<RegistryValue Root="HKCR" Key="CLSID\{xxx}\Implemented Categories\{xxx}" Value="" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{xxx}\InprocServer32\525.0.4573.25681" Name="Class" Value=" MYID1" Type="string" Action="write" />
...
</Component>
</ComponentGroup>
我用xxx替换了一些ID,所以它们不是问题。如果还有其他错误,请通知我。
现在我的问题是:我是否需要在回滚阶段明确指定卸载COM组件?因为我遇到了一些问题,安装失败后,安装的进一步尝试将无法通过,并且会弹出一些“ActiveX对象无法创建”错误。我怀疑是因为在以前的失败安装中COM组件未成功注销。但我不确定。事实上,我对COM互操作的了解有限,所以我不确定安装/卸载它们的必要性。任何帮助,将不胜感激。谢谢!
答案 0 :(得分:2)
当您使用Heat来收集COM组件时,这就足够了。如果安装失败并回滚,它应该处理取消注册COM组件。