问题标签 [regfreecom]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2804 浏览

c# - 在 .NET 应用程序中使用免费注册 com

我正在尝试使用 .NET 服务中的第 3 方 COM DLL(我不相信它是 .NET 组件)而不注册 COM DLL,但到目前为止我还没有运气。

我已经从这里(http://stackoverflow.com/questions/465882/generate-manifest-files-for-registration-free-com)复制了清单文件以用作起点(我使用生成的 COM DLL 清单引用的 mt.exe/regsvr42.exe)。但是我得到的只是以下错误:

异常:System.InvalidCastException 消息:无法将“LOGICLib.LogicClass”类型的 COM 对象转换为接口类型“LOGICLib.ILogic”。此操作失败,因为对 IID 为“{AAAAAAA-AAAA-AAAA-AAAA-AAAAAA3E8FB4}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE)) . 来源:D:\MyProject\Source\Server\MyAssembly\Loader.cs:line 中 My.Server.MyAssembly.Loader.Connect() 的 LOGICLib.LogicSecuredClass.Connect(String IP, UInt16 Value, Int32& Result) 的 Interop.LOGICLib 461

应用程序清单以启动服务的 exe 命名 - 我也尝试在调用 COM DLL 的程序集之后命名它。我尝试过从命令行和 Visual Studio 的调试器开始。我也尝试过使用第三方提供的互操作文件并生成我自己的。

(注意——到目前为止,我只在 Windows XP 下测试过。)

我现在已经花了两天时间,但一点进展都没有。有什么我可能错过的想法吗?

0 投票
1 回答
1163 浏览

com - 无注册 COM - COM dll 相对于客户端 exe 的位置

我想使用 reg-free com,这样我就不必注册我的旧版 com 组件。但是,我希望能够将 com dll 放在不在客户端 exe 目录中或之下的位置,例如 ....\lib。我无法在服务器清单文件中执行此操作,因为它不允许相对或绝对路径。

有谁知道是否有办法解决这个问题?


更新:我只找到了在 XP 上工作的相对路径。但是,我可以使用 Activation Context API 在 Windows Server 2008 上使用绝对路径,这很酷。我现在的问题是我的 COM 组件对托管数据库驱动程序具有静态依赖关系,但目前它没有找到它。从我读到的关于清单文件的内容中,我希望我可以简单地将另一个元素添加到指向这个 dll 的 COM reg-free 清单中,因为它与 COM dll 位于同一目录中,但我无法让它工作。所以,总而言之,我在一个目录中有一个 exe,它使用 Activation Context API 来引用另一个目录(不是 exe 目录的子目录)中的 COM 清单/dll,它可以正确找到并加载。

0 投票
2 回答
2643 浏览

c++ - 调试 COM 免费注册 (c++)

我构建了一个使用两个 COM 服务器 dll 的 COM 客户端应用程序;我希望这个应用程序在没有 COM 注册的情况下运行 - 即:winsxs / .manifests

当我尝试从我的客户端应用程序创建我的 COM 对象的实例时,我收到一个(...几乎预期的...)“类未注册”消息。

我以前已经成功过这种配置,但我不知道为什么这个配置会失败。


这里还有一些细节:

  • 我拥有的模块:
    • 一个依赖于 2 个 COM 服务器(dll1.dll 和 dll2.dll)的 MFC 客户端
    • dll1.dll COM 服务器依赖于 dll2.dll
    • dll2.dll 没有 COM 依赖

我拥有的 COM 对象:

  • 在 dll1.dll(.idl 语言)中

-

-

  • 在 dll2.dll 中

-

-

  • 客户电话

-

-

  • client.exe.2.manifest

-

-


在 sxs 激活上下文生成过程中我没有错误: - windows 日志中没有错误(应该意味着我的清单语法是正确的) - sxstrace 没有检测到错误(日志以“信息:激活上下文生成成功。”消息结尾并且不包含错误或可疑消息;此外,我看到我的清单已正确加载)

任何想法?

有没有办法用 sxstrace 更深入地调试 sxs?例如,获取实际注册的 com 或 clr 类的列表???

提前谢谢你

0 投票
2 回答
374 浏览

c# - 在 C# 中静态链接 COM DLL(避免使用 regfree)

我可能有一个愚蠢的问题:

我们有一个 VC++ COM DLL(内部开发),我们已将我们的主应用程序移植到 C# 并使用 COM Interop,无需注册即可访问 COM dll。使用内部嵌入式清单一切正常。

但是,友好的产品开发/营销/销售希望将包最小化并直接包含COM dll。不知何故,有人开始相信应用程序发行版应该只包含 exe(因为它是非托管的,我们不能只是 ILMerge 它)。

既然我们有 COM 的 tlb/lib,我们能否以某种方式静态链接它,而不将整个 COM 移植到 C# 管理的返工?

谢谢

PS 请原谅我的措辞:公司规模缩小了,我是 Python 人,上周左右必须学习所有 .NET,因为现在我正在做我的工作和 2 位前高级 .net 开发人员的工作

0 投票
1 回答
1973 浏览

delphi - 并排(或免注册 COM)和 Delphi?

可能重复:
免注册 COM/DLL?

我支持一个使用大量用 Delphi 编写的 ActiveX 控件的应用程序,主要用于将应用程序聚合在一起。这些当前必须注册,这可以,但不整洁。有没有人为用 Delphi 编写的 DLL(或任何其他非 .NET 解决方案)获得并排(或 reg-free-com)?

0 投票
0 回答
528 浏览

visual-studio - 如何自定义 Visual Studio 生成的免注册 COM 清单?

我正在尝试通过 ClickOnce 部署带有自定义 COM 组件的 .NET 应用程序。不幸的是,该应用程序不适用于 Visual Studio 生成的清单以在免注册模式下使用 COM 组件。经过几次尝试,我发现清单中需要更改。我需要将 <comInterfaceExternalProxyStub> 元素添加到通过在 COM 引用的属性中设置 Isolated=True 生成的清单中。

我可以手动进行此更改,然后以正确的顺序使用 mage 重新签署 ClickOnce 清单,并且应用程序可以正常工作。但我想简化这个过程,这样下一个人就可以部署应用程序而无需经历这些。

理想情况下,我可以简单地在 Visual Studio 中编辑一些设置,或者手动更改 MSBuild 项目文件以进行此更改。如果这不可能,我想我将不得不编写一个脚本来进行更改并将其作为构建后步骤或其他内容包含在内。

有没有办法为将来的部署自动进行这种修改?

0 投票
1 回答
1382 浏览

com-interop - 如何让免注册 COM 在托管/非托管互操作中工作

我有一个非托管 C++/ATL 进程内 COM 对象(在 Unmanaged.dll 中),我试图从托管 C# DLL (Managed.dll) 中使用它。但是,我想使用免注册 COM。我把它归结为这些步骤:

  • 在开发机器上注册 COM 对象。进程内服务器必须具有正确注册的类型库。
  • 在 C# 项目中添加对 COM 对象的引用,然后将引用属性设置为独立 = True。

这将生成 Unmanaged.dll、Managed.dll 和 Native.Managed.manifest。打开清单,很清楚系统如何使用它以免注册的方式加载 COM 对象。

这就是问题所在。我有一个托管 EXE (Managed.exe),它动态加载 Managed.dll 以访问公共类型。我所说的“动态”是指它使用 Assembly.LoadFrom("Managed.dll")。当 Managed.dll 中的代码尝试创建 COM 对象时,它会收到“类未注册”异常。加载 Managed.dll 时,激活上下文似乎没有正确设置。

有没有办法让免费注册的 COM 在这种情况下工作?

0 投票
1 回答
1190 浏览

visual-studio - 可以在开发机器上不注册的情况下使用免注册 COM 组件吗?

我有一个我开发的免注册 COM 组件,它在目标机器上运行良好,无需注册组件。它位于嵌入了 tlb 的 dll 和具有清单的 RT_MANIFEST 资源中,该清单列出了组件的程序集依赖项和 CLSID。

在 Visual Studio(2008) 中,我仍然需要注册这个 COM 组件来完成我尝试过的至少两件事。添加对组件的引用时,除非组件已注册,否则我无法为引用选择隔离属性。除非组件已注册,否则在调试器运行时我也无法创建对象的实例。但是,我可以添加引用并编译应用程序并在不注册组件的情况下运行它。

是否有某种方法可以在 Visual Studio 中使用免注册 COM 组件而不注册它,或者是否必须在开发机器上注册它才能正常工作?

0 投票
1 回答
1254 浏览

com - 在不同位置使用带有许多 dll 的 Activation Context API

我在位置 A 运行的 .Net 客户端中使用 Activation Context API 在 WS2008 上的位置 B(与 A 完全不同的位置,而不是同一台机器上的兄弟/后代等)加载一个无注册的 COM 组件通过在 ACTCTX 中的位置 B 传递,它工作正常。

但是,我现在需要对另一个 COM dll 执行相同的操作,该 COM dll 又依赖于位于完全不同位置的几个 .Net COM 程序集。

我已将依赖的 .Net 程序集添加到清单中,并将清单和 COM dll 放在位置 B,但我必须将依赖的 .Net 程序集放在位置 A(客户端运行的位置)以使其工作。实际上,他们将生活在与位置 A 和位置 B 完全不同的目录中。

我正在尝试做的事情是否可能,即是否可以使用激活上下文 api 在不同的不相关目录中加载多个 COM 组件?

0 投票
1 回答
363 浏览

c++ - 在 C++ 组件中使用激活上下文 API

我是 ac# 开发人员,目前正在开发一些遗留的 c++ com 组件。我正在尝试将激活上下文 api 代码添加到 com 组件,以便无需注册即可调用其他 com 组件。

我写了一个虚拟的 C++ 项目来玩激活上下文的东西,它没有问题。但是,当我将相同的代码添加到旧版 com 组件中时,我什至无法编译它: Error 1 error C2065: 'ACTCTX' : undeclared identifier

我没有在我的虚拟项目中添加任何特殊的标题,但它工作得很好,所以我不确定为什么会这样。希望这对于经验丰富的 c++ 开发人员来说是微不足道的......