Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2012 如何在不注册的情况下生成TLB文件?_Visual Studio 2012_Wix_Typelib - Fatal编程技术网

Visual studio 2012 如何在不注册的情况下生成TLB文件?

Visual studio 2012 如何在不注册的情况下生成TLB文件?,visual-studio-2012,wix,typelib,Visual Studio 2012,Wix,Typelib,我有一个在VisualStudio2012中构建的带有公共COM/ActiveX接口的库。我有一个用WiX编写的库的安装程序。除了在我的构建服务器上,我们希望在没有管理员权限的情况下构建安装程序之外,所有这些都可以很好地工作 问题是,目前我已经检查了“注册COM互操作”。这将生成一个TLB文件,并在构建时注册库(我认为)。在构建时注册需要管理员权限,因此如果我不使用它们构建,构建将失败 但是,如果我取消选中“Register for COM interop”以便可以在没有管理员权限的情况下进行构

我有一个在VisualStudio2012中构建的带有公共COM/ActiveX接口的库。我有一个用WiX编写的库的安装程序。除了在我的构建服务器上,我们希望在没有管理员权限的情况下构建安装程序之外,所有这些都可以很好地工作

问题是,目前我已经检查了“注册COM互操作”。这将生成一个TLB文件,并在构建时注册库(我认为)。在构建时注册需要管理员权限,因此如果我不使用它们构建,构建将失败

但是,如果我取消选中“Register for COM interop”以便可以在没有管理员权限的情况下进行构建,则不会生成TLB文件。所以我的WiX安装程序无法构建

我可以看到两种可能的解决方案:

  • 有一些方法可以生成TLB,而无需在 构建时间
  • 让WiX生成TLB。我还没看到有什么要做的 这我当前的TLB安装文件引用了TLB文件 直接,像这样:
    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也找到了相同问题的答案。哎呀:我有时会把进出口弄糊涂:)