WIX heat 用于注册 64 位 COM [英] WIX heat for registering COM with 64 bit

查看:43
本文介绍了WIX heat 用于注册 64 位 COM的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用以下行为注册的 COM 生成 wxs 文件

"C:\Program Files (x86)\WiX Toolset v3.10\bin\heat.exe" dir "$(SolutionDir)Output" -dr INSTALLFOLDER -cg SapFilesComp -gg -g1 -sf -srd-var "var.outputFolder" -out "$(ProjectDir)\SapHeatFiles.wxs"

它工作正常,每当我使用 regasm 32 位但每当我尝试使用 Regasm(64 位)注册时,我收到以下错误:

<块引用>

TypeLib 元素是非广告元素,因此需要父文件元素.

附加了两种情况下生成的 wxs 文件(我注意到在第一种情况下TypeLib"元素嵌套在File"元素中,而在第二种情况下它们是同级的)::>

32 位

<File Id="fil45CFD89B1F7C95D68EA24CFD60BA3404" KeyPath="yes" Source="$(var.outputFolder)\SAP2000Plugin_MALI_CurveLoadV18.tlb"><TypeLib Id="{040DE481-6BD0-4EB1-8DAC-32FC97B37E09}" Description="Mostafa Ali 的 SAP2000 曲线加载插件" HelpDirectory="INSTALLFOLDER" Language="0" MajorVersion="2" MinorVersion="0">;<Interface Id="{DE52BD0F-3562-39A1-95E2-E55EAB5E9340}" Name="_CPlugin" ProxyStubClassId32="{00020424-0000-0000-C000-0000000000046}</TypeLib></文件></组件>

64 位

<File Id="fil45CFD89B1F7C95D68EA24CFD60BA3404" KeyPath="yes" Source="$(var.outputFolder)\SAP2000Plugin_MALI_CurveLoadV18.tlb"/><RegistryValue Root="HKCR" Key="TypeLib\{040DE481-6BD0-4EB1-8DAC-32FC97B37E09}\2.0\0\win64" Value="[#fil45CFD89B1F7C95D68EA24CFD60BA3404]" Type="string="string"><TypeLib Id="{00020430-0000-0000-C000-000000000046}" Description="OLE Automation" HelpDirectory="SystemFolder" Language="0" MajorVersion="2" MinorVersion="0"><Interface Id="{4EF6100A-AF88-11D0-9846-00C04FC29993}" Name="FontEvents" ProxyStubClassId32="{00020420-0000-0000-C000-0000000000046"<Interface Id="{7BF80981-BF32-101A-8BBB-00AA00300CAB}" Name="图片" ProxyStubClassId32="{00020420-0000-0000-C000-0000000000046}"/<Interface Id="{BEF6E003-A874-101A-8BBA-00AA00300CAB}" Name="Font" ProxyStubClassId32="{00020420-0000-0000-C000-000000000046}"/</TypeLib><TypeLib Id="{040DE481-6BD0-4EB1-8DAC-32FC97B37E09}" Description="SAP2000 曲线载荷插件,Mostafa Ali" HelpDirectory="INSTALLFOLDER" MajorVersion="2" MinorVersion="0"><Interface Id="{DE52BD0F-3562-39A1-95E2-E55EAB5E9340}" Name="_CPlugin" ProxyStubClassId32="{00020424-0000-0000-C000-0000000000046}</TypeLib></组件>

感谢您的帮助.

解决方案

以防万一有人遇到同样的问题,我通过手动在 file 元素中嵌套 Typelib 元素解决了这个问题,如下所示:

<RegistryValue Root="HKCR" Key="TypeLib\{040DE481-6BD0-4EB1-8DAC-32FC97B37E09}\2.0\0\win64" Value="[#fil45CFD89B1F7C95D68EA24CFD60BA3404]" Type="string="string"><File Id="fil45CFD89B1F7C95D68EA24CFD60BA3404" KeyPath="yes" Source="$(var.outputFolder)\SAP2000Plugin_MALI_CurveLoadV18.tlb" ><TypeLib Id="{00020430-0000-0000-C000-000000000046}" Description="OLE Automation" Language="0" MajorVersion="2" MinorVersion="0" ><Interface Id="{4EF6100A-AF88-11D0-9846-00C04FC29993}" Name="FontEvents" ProxyStubClassId32="{00020420-0000-0000-C000-0000000000046"<Interface Id="{7BF80981-BF32-101A-8BBB-00AA00300CAB}" Name="图片" ProxyStubClassId32="{00020420-0000-0000-C000-0000000000046}"/<Interface Id="{BEF6E003-A874-101A-8BBA-00AA00300CAB}" Name="Font" ProxyStubClassId32="{00020420-0000-0000-C000-000000000046}"/</TypeLib><TypeLib Id="{040DE481-6BD0-4EB1-8DAC-32FC97B37E09}" Description="Mostafa Ali 的 SAP2000 曲线载荷插件" HelpDirectory="INSTALLFOLDER" Language="0" MajorVersion="2" MinorVersion="0" ><Interface Id="{DE52BD0F-3562-39A1-95E2-E55EAB5E9340}" Name="_CPlugin" ProxyStubClassId32="{00020424-0000-0000-C000-0000000000046}</TypeLib></文件></组件>

I am using the following line to generate the wxs file for registered COM

"C:\Program Files (x86)\WiX Toolset v3.10\bin\heat.exe" dir "$(SolutionDir)Output" -dr INSTALLFOLDER -cg SapFilesComp -gg -g1 -sf -srd -var "var.outputFolder" -out "$(ProjectDir)\SapHeatFiles.wxs"

It works fine, whenever I use regasm 32 bit but whenever I try to register using Regasm (64bit), I got the following error:

The TypeLib element is non-advertised and therefore requires a parent File element.

Attached the generated wxs file for both cases (I noticed that in first case "TypeLib" element is nested in the "File" element, while they are sibling in the second case):

32 bit

<Component Id="cmp876EABD23BD0B870AA62FA8F8E0FE6B8" Directory="INSTALLFOLDER" Guid="92ABC2C9-FCBC-403C-BDEF-26FBD3F7246A">
     <File Id="fil45CFD89B1F7C95D68EA24CFD60BA3404" KeyPath="yes" Source="$(var.outputFolder)\SAP2000Plugin_MALI_CurveLoadV18.tlb">
          <TypeLib Id="{040DE481-6BD0-4EB1-8DAC-32FC97B37E09}" Description="SAP2000 curved load plugin by Mostafa Ali" HelpDirectory="INSTALLFOLDER" Language="0" MajorVersion="2" MinorVersion="0">
             <Interface Id="{DE52BD0F-3562-39A1-95E2-E55EAB5E9340}" Name="_CPlugin" ProxyStubClassId32="{00020424-0000-0000-C000-000000000046}" />
          </TypeLib>
     </File>
</Component>

64 bit

<Component Id="cmp876EABD23BD0B870AA62FA8F8E0FE6B8" Directory="INSTALLFOLDER" Guid="342BA35D-063E-4C1D-9099-8AD4B78B17FA">
    <File Id="fil45CFD89B1F7C95D68EA24CFD60BA3404" KeyPath="yes" Source="$(var.outputFolder)\SAP2000Plugin_MALI_CurveLoadV18.tlb" />
    <RegistryValue Root="HKCR" Key="TypeLib\{040DE481-6BD0-4EB1-8DAC-32FC97B37E09}\2.0\0\win64" Value="[#fil45CFD89B1F7C95D68EA24CFD60BA3404]" Type="string" Action="write" />
    <TypeLib Id="{00020430-0000-0000-C000-000000000046}" Description="OLE Automation" HelpDirectory="SystemFolder" Language="0" MajorVersion="2" MinorVersion="0">
        <Interface Id="{4EF6100A-AF88-11D0-9846-00C04FC29993}" Name="FontEvents" ProxyStubClassId32="{00020420-0000-0000-C000-000000000046}" />
        <Interface Id="{7BF80981-BF32-101A-8BBB-00AA00300CAB}" Name="Picture" ProxyStubClassId32="{00020420-0000-0000-C000-000000000046}" />
        <Interface Id="{BEF6E003-A874-101A-8BBA-00AA00300CAB}" Name="Font" ProxyStubClassId32="{00020420-0000-0000-C000-000000000046}" />
    </TypeLib>
    <TypeLib Id="{040DE481-6BD0-4EB1-8DAC-32FC97B37E09}" Description="SAP2000 curved load plugin by Mostafa Ali" HelpDirectory="INSTALLFOLDER" MajorVersion="2" MinorVersion="0">
        <Interface Id="{DE52BD0F-3562-39A1-95E2-E55EAB5E9340}" Name="_CPlugin" ProxyStubClassId32="{00020424-0000-0000-C000-000000000046}" />
    </TypeLib>
</Component>

Thanks for your help.

解决方案

Just in case someone faces the same problem, I solved the problem by manually nesting Typelib element inside the file element as follows:

<Component Id="cmp876EABD23BD0B870AA62FA8F8E0FE6B8" Directory="INSTALLFOLDER" Guid="D3FCCCC3-FEC9-41B6-9201-E01658CC20B7">
    <RegistryValue Root="HKCR" Key="TypeLib\{040DE481-6BD0-4EB1-8DAC-32FC97B37E09}\2.0\0\win64" Value="[#fil45CFD89B1F7C95D68EA24CFD60BA3404]" Type="string" Action="write" />
  <File Id="fil45CFD89B1F7C95D68EA24CFD60BA3404" KeyPath="yes" Source="$(var.outputFolder)\SAP2000Plugin_MALI_CurveLoadV18.tlb" >
    <TypeLib Id="{00020430-0000-0000-C000-000000000046}" Description="OLE Automation" Language="0" MajorVersion="2" MinorVersion="0" >
      <Interface Id="{4EF6100A-AF88-11D0-9846-00C04FC29993}" Name="FontEvents" ProxyStubClassId32="{00020420-0000-0000-C000-000000000046}" />
      <Interface Id="{7BF80981-BF32-101A-8BBB-00AA00300CAB}" Name="Picture" ProxyStubClassId32="{00020420-0000-0000-C000-000000000046}" />
      <Interface Id="{BEF6E003-A874-101A-8BBA-00AA00300CAB}" Name="Font" ProxyStubClassId32="{00020420-0000-0000-C000-000000000046}" />
    </TypeLib>
    <TypeLib Id="{040DE481-6BD0-4EB1-8DAC-32FC97B37E09}" Description="SAP2000 curved load plugin by Mostafa Ali" HelpDirectory="INSTALLFOLDER" Language="0" MajorVersion="2" MinorVersion="0" >
      <Interface Id="{DE52BD0F-3562-39A1-95E2-E55EAB5E9340}" Name="_CPlugin" ProxyStubClassId32="{00020424-0000-0000-C000-000000000046}" />
    </TypeLib>
  </File>
</Component>

这篇关于WIX heat 用于注册 64 位 COM的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆