installation - 回滚时在WIX中注销COM组件,有必要吗?

标签 installation wix com-interop rollback

我正在创建一个 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>

我将一些ID替换为xxx,所以它们不是问题。如果还有什么不对的地方,请告诉我。

现在我的问题是:我是否需要显式指定在回滚阶段卸载COM组件?因为我遇到了一些问题,在安装失败后,无法进行进一步的安装尝试,并且弹出一些“无法创建ActiveX对象”的错误。我怀疑是因为之前安装失败时COM组件没有注销成功。但我不确定。事实上,我对 COM 互操作的了解有限,所以我不确定安装/卸载它们需要什么。任何帮助,将不胜感激。谢谢!

最佳答案

当您使用 Heat 来收获 COM 组件时,这就足够了。如果安装失败并回滚,它应该处理取消注册 COM 组件的情况。

关于installation - 回滚时在WIX中注销COM组件,有必要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11409782/

相关文章:

unit-testing - 使用与不使用 TestFixture 属性有什么区别

wix - 如何在不存在 .msi 文件的情况下使用产品 id guid 使用 msiexec 进行卸载

c# - 无法运行非常简单的 COM 客户端

.net - tlbimp如何用于指定不同的文件和程序集版本?

ruby - 如何使用本地源目录中的代码替换 Ruby gem

installation - 轻松安装 matplotlib - 缺少脚本 easy_install-xrixnr

python - 安装旧版本的 Python 以在 Mac OS X 上进行测试

wix - wix 可以提示输入 Windows 服务用户名/密码吗?

installation - 为什么在 VDPROJ 上使用 Windows Installer XML (WiX)?

c# - 将参数从 C# 传递到 C++