进程外 EXE 的免注册 COM
Reg-free COM out of process EXE
我有几个组件(多个.dll,一个.exe(,我需要免费使用注册。在我的 sxs 清单中,我将 dll 文件列为;
<file name="xxx.dll"
<comClass
description="xxx component"
clsid="{xxx-xxx}"
threadingModel="Apartment" />
</file>
我已经创建并激活了一个激活上下文,并且可以在这些 dll 组件上调用CoCreateInstance();
而不会出现问题。
但是,我还有一个需要运行的 COM 服务器单例(作为.exe(,我相信您只能将 dll 文件放在 sxs 清单中。我有它的CLSID。
我受到限制,因为使用 regsvr 不是一种选择,那么有没有其他方法可以实现这一点?理想情况下,在我创建这些其他组件的同一位置以编程方式完成所有操作。
那座桥太远了...尝试通过清单执行此操作。但是,您可以手动执行此操作。但是,您所要做的就是操作系统所做的事情。 您必须:
- 使用所有正确的命令行选项调用 CreateProcess((
- 在进程上调用 WaitForInputIdle((
- 进行 COM 调用
您可能还必须具有所用接口的条目(如果它们是自定义的(。如果可能的话,我可能会建议使它们与IDispatch兼容。
若要了解需要哪些命令行选项,必须在生成计算机上注册服务器,然后查找 CLSID 的 LocalServer32 注册表项并查看参数是什么。如果它们是 MFC 或 ATL,它们可能彼此略有不同,但通常 ATL 参数始终相同,除非您执行自定义操作。
如果由于某种原因 CreateObject(( 失败,那么你可能不得不在你创建的进程上调用 TerminateProcess((,否则你将有一堆孤立的进程。如果成功创建对象,则正常的 COM 引用计数应足以自动关闭服务器进程。
相关文章:
- 进程外 EXE 的免注册 COM
- 如何在C++非托管/本机 DLL 中从注册免费 COM C# 托管 DLL 创建 COM 对象
- 可视化 使用 C++ API 注册 COM DLL 的所有接口
- 如何在Windows中注册COM(组件对象模型)?(用于图标覆盖处理程序)
- 从未通过 C# 注册C++ COM 服务器访问 COM 接口
- 为使用C# /托管代码的无注册COM Interop设置DLL
- 已确认的已注册com对象cocreateinstance返回regdb_e_classnotreg
- 如何在不同的目标平台上以编程方式智能注册 32 位 COM/DLL 组件
- 从注册表中删除 COM 服务器的铭文会将键保留在 HKEY_CLASSES_ROOTTypeLib 中
- 在 C++ 中使用 C# COM 包装的 DLL 会抛出未注册的类
- 使用来自 DLL 的 COM 对象而不注册
- 如何在 Visual Basic DLL 和 C++ DLL 之间创建隔离/无注册的 COM
- 如何在 WinCE 5.0 中注册 COM 组件
- 类未在我自己的 COM 组件上注册 (0x80040154)
- 免注册 COM 互操作.程序集 B 引用程序集 A
- 一个C++客户端无法使用我们新的 COM 注册的 .NET .dll加载,另一个客户端可以正常工作
- 为什么 COM 类需要构造函数?如何在不注册的情况下使用 COM 类
- 如何在同一系统中为不同的用户帐户注册相同的COM dll
- 仅用IDL文件注册COM对象
- 有谁知道免注册COM和拖放功能之间可能存在哪种关系