Visual studio 2012 如何在不注册的情况下生成TLB文件?
我有一个在VisualStudio2012中构建的带有公共COM/ActiveX接口的库。我有一个用WiX编写的库的安装程序。除了在我的构建服务器上,我们希望在没有管理员权限的情况下构建安装程序之外,所有这些都可以很好地工作 问题是,目前我已经检查了“注册COM互操作”。这将生成一个TLB文件,并在构建时注册库(我认为)。在构建时注册需要管理员权限,因此如果我不使用它们构建,构建将失败 但是,如果我取消选中“Register for COM interop”以便可以在没有管理员权限的情况下进行构建,则不会生成TLB文件。所以我的WiX安装程序无法构建 我可以看到两种可能的解决方案:Visual studio 2012 如何在不注册的情况下生成TLB文件?,visual-studio-2012,wix,typelib,Visual Studio 2012,Wix,Typelib,我有一个在VisualStudio2012中构建的带有公共COM/ActiveX接口的库。我有一个用WiX编写的库的安装程序。除了在我的构建服务器上,我们希望在没有管理员权限的情况下构建安装程序之外,所有这些都可以很好地工作 问题是,目前我已经检查了“注册COM互操作”。这将生成一个TLB文件,并在构建时注册库(我认为)。在构建时注册需要管理员权限,因此如果我不使用它们构建,构建将失败 但是,如果我取消选中“Register for COM interop”以便可以在没有管理员权限的情况下进行构
xml
.... ....
热回收tlb文件不存在吗?类似于:heat file-out mytlb.wxs 我认为这不需要管理员权限
然后,您只需将tlb作为文件安装,并在构建MSI文件之前更新wxs以引用其实际安装位置(目录属性) 如果无法注册COM互操作,则不会生成tlb。例如,由于缺少管理员权限,注册COM互操作可能会失败 “TlbExp.exe”是用于生成tlb文件的命令。要使用它,请取消选中项目属性的“编译”选项卡上的“注册COM互操作”选项,这样生成将停止注册失败。然后,通过单击位于同一选项卡上的“生成事件…”按钮,将其添加为生成后事件:
"$(FrameworkSdkDir)\bin\NETFX 4.0 Tools\tlbexp.exe" "$(TargetFileName)" "$(TargetName).tlb"
对不起,如果不清楚的话,我就是这么做的。WiX代码就是热产生的。问题是,在构建安装程序时,WiX似乎仍然需要源TLB文件。据我所知,生成TLB文件的唯一方法是使用regasm或“注册COM互操作”。这需要管理员权限。好的,很抱歉,没有捕获到这一点。问题是Register for COM Interop设置直接在系统上生成条目,并运行注册表收割机来获取它们,我认为VS会在背后运行regasm。您只需要生成TLB文件,因此tlbimp.exe可能就是您所需要的,因为它生成TLB而不更改系统。结果表明,tlbimp.exe的作用与我想要的相反,但它确实为我指明了正确的方向。tlbexp.exe是正确的命令。现在这是一个生成后事件:“$(FrameworkSdkDir)\bin\NETFX 4.0 Tools\tlbexp.exe”Proj.dll Proj.tlb也找到了相同问题的答案。哎呀:我有时会把进出口弄糊涂:)