【问题标题】:regtlibv12.exe replacement in Visual Studio 2017Visual Studio 2017 中的 regtlibv12.exe 替换
【发布时间】:2018-07-01 03:54:45
【问题描述】:

我正在开发的产品需要注册类型库文件(后缀.tlb),以便组件之间的内部 COM 通信正常工作。在生产机器上,此注册由 InstallShield 安装程序执行。然而,在开发人员机器上,到目前为止,我们依靠实用程序 regtlibv12.exe 来完成这项工作。

在将我们的开发环境升级到 Visual Studio 2017(以前的 Visual Studio 2013)时,我们发现 regtlibv12.exe 不再存在。在整个机器中快速搜索regtlib*tlb*.exe 和其他可能的模式并没有产生任何结果。另外,我的互联网搜索结果没有产生任何有用的信息——但我可能只是使用了错误的关键字......

您知道与 Visual Studio 2017 一起部署的任何实用程序可以替换 regtlibv12.exe 吗?可以从 PowerShell 脚本运行的任何内容都是可以接受的。同样可以接受的是相关 .NET API 的提示,我可以用它来自己编写注册过程的代码(我什至可以尝试 p/invoke Win32 函数)。 可接受的是需要作为构建过程的一部分运行的解决方案 - 我不希望在构建服务器上注册类型库!

如果这很重要:.tlb 文件是从带有tlbexp.exe 的 .NET 程序集生成的。

【问题讨论】:

  • 这就是 tlbexp.exe 的作用。为什么你不想在构建服务器上使用它并不明显。
  • 例如...语法将被删除,但这里是: ...显然填写正确的 guid 等。用于隔离 COM 的 Google
  • @herzbube,这是我不清楚的地方:您正在寻找一个替换 regtlibv12 的替代品,它确实 注册了库,但您不再 要注册吗? FWIW,看看this 是否有帮助。
  • “填写注册表”?如果您不经常更改 guid(为什么会这样?),它将始终创建相同的条目。像其他人一样,我不明白您要解决什么真正的问题。否则很容易编写自己的工具:stackoverflow.com/questions/23487332/…
  • 更改文件版本不会更改注册 guid,仅更改键值。如果您也想自己注册,这里是另一个链接:stackoverflow.com/a/35789844/403671 PS:我不回答我不明白的问题,因此 cmets。

标签: visual-studio com visual-studio-2017 regtlib


【解决方案1】:

按照 Joe Willcoxson 的建议(请参阅 OP cmets),我最终将此 sn-p 添加到我们的主要可执行清单中:

<file name="foo.tlb">
    <typelib
        tlbid="{EA4C1F13-2831-37CD-A94A-C761AF367506}"
        version="1.0"
        helpdir=""/>
</file>

正如 Joe 所提到的,要使其正常工作,类型库文件必须与包含清单的可执行文件位于同一文件夹中。

具体到我的情况,我很“幸运”,因为我们的主可执行文件是一个进程外 COM 服务器,所以当客户端创建一个 COM 对象时,我们的主可执行文件作为一个单独的进程启动并且我们的清单生效.如果我们的 COM 对象位于进程内 COM 服务器中,那么客户端可执行文件的清单就会生效,我必须将清单 sn-p 添加到客户端可执行文件中。

作为最后一点,我想补充一点,这个解决方案可能并不普遍有用。其他人可以从这里得到的是,Windows 注册表中的 COM 注册可以通过一种称为“隔离 COM”的技术来避免,该技术也称为“免注册 COM”。您是否可以利用免注册 COM 在很大程度上取决于您的 COM 服务器和 COM 客户端的部署方式,以及您是否可以控制 COM 服务器和客户端使用的清单。

像往常一样,COM 不是一个简单的主题,但作为您研究的起点,我可以推荐 2005 年 MSDN 文章 Registration-Free Activation of COM Components: A Walkthrough 及其 .NET 伴侣 Registration-Free Activation of .NET-Based Components: A Walkthrough

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 2018-01-04
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多