我有一个带有在Visual Studio 2012中构建的公共COM / ActiveX接口的库。我有一个用WiX编写的库的安装程序。这一切都运行得很好,除了在我的构建服务器上我们想要在没有管理员权限的情况下构建安装程序。
这就是问题,目前我已经注册了COM互操作"检查。这两者都生成一个TLB文件,并在构建时注册库(我认为。)在构建时注册需要管理员权限,因此如果我不用它们构建,构建将失败。
但是,如果我取消选中"注册COM互操作"所以我可以在没有管理员权限的情况下构建,不会生成TLB文件。所以我的WiX安装程序无法构建。
我可以看到两种可能的解决方案:
xml
<File Id="FILE.COM.TLB" KeyPath="yes" Source="..\..\Master\Proj\bin\$(var.Configuration)\Proj.tlb">
<TypeLib Id="{8CC87042-4B1B-4FE4-86D5-A12C1A55C8AA}" Description="PrimProj" HelpDirectory="DIR.BIN.HELP" Language="0" MajorVersion="1" MinorVersion="3">
.... <snip> ....
</TypeLib> </File>
答案 0 :(得分:1)
如果无法注册COM互操作,则不会构建tlb。例如,由于缺少管理员权限,注册COM互操作可能会失败。
&#34; TlbExp.exe&#34;是构建tlb文件的命令。要使用它,请取消选中&#34;注册COM互操作&#34;项目属性的编译选项卡上的选项,因此构建将停止注册失败。然后,通过单击&#34;构建事件...&#34;将其添加为后期构建事件。按钮位于同一个标签上:
"$(FrameworkSdkDir)\bin\NETFX 4.0 Tools\tlbexp.exe" "$(TargetFileName)" "$(TargetName).tlb"
答案 1 :(得分:-1)
不热收割tlb文件?类似于:heat file -out mytlb.wxs
我认为这不需要管理员权限。
然后,您只需将tlb作为文件安装,并在构建MSI文件之前更新wxs以引用其实际安装位置(目录属性)。