gpt4 book ai didi

c# - 从 exe 中检索 COM ProgID 而无需注册

转载 作者:太空狗 更新时间:2023-10-29 23:48:39 26 4
gpt4 key购买 nike

背景:

我想从 VB6 应用程序中提取 COM 数据,以便我可以将其正确注册(根据 Microsoft 最佳实践)应用程序。我使用的是 WiX 3.0,heat.exe 不会提取数据(已知的 heat 问题),而且我还没有准备好访问相关的 TLB 文件。 VB6 应用程序没有打开兼容性,因此它会在每次构建时重新生成 COM GUID(他们希望应用程序能够与旧版本并排运行。)

我创建了一个 C# 应用程序,它将在不注册 VB6 应用程序的情况下收集 TypeLib、接口(interface)和 CoClass 信息,并创建一个 wxs 文件供 candle 使用。我的公司还有其他几个像这样的旧应用程序,我想让它成为一个更通用的解决方案。

问题:

1.有没有办法在没有项目或 TLB 文件且不注册的情况下从应用程序中收集“真实的”ProgID(程序员预期的)?

2.有没有办法在不注册的情况下从DLL中找出预期的线程模型? (我打算它可以处理所有 COM 事件项,还不如完整)谢谢。

最佳答案

是也不是。

据我所知,没有从类型库或 COM 服务器中获取 ProgID 的通用方法。

DLL 的入口点是 DllRegisterServer,它应该将注册信息写入注册表,对于 EXE 服务器,它们通常有一个具有相同含义的命令行参数。

类型库恰好包含组件中所有接口(interface)和组件类的描述,但它们很少包含人类可读的 ProgID。

我能看到并推荐的唯一明确方法是覆盖 HKCR\CLSID 键以暂时指向某个地方,然后调用 DllRegisterServer。由于注册表项覆盖是进程本地的,因此这仅适用于进程内 (DLL) 服务器。

参见 http://msdn.microsoft.com/en-us/library/ms724901(v=VS.85).aspx有关覆盖注册表项的信息。

然后检查暂存注册表并查看进行了哪些更改,例如CLSID<->ProgID 映射、线程模型等

关于c# - 从 exe 中检索 COM ProgID 而无需注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2770339/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com