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

标签 c# .net com regfreecom

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

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

异常:System.InvalidCastException 消息:无法将类型为“LOGICLib.LogicClass”的 COM 对象转换为接口(interface)类型“LOGICLib.ILogic”。此操作失败,因为 IID 为“{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAA3E8FB4}”的接口(interface)的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(interface)(HRESULT 异常:0x80004002 (E_NOINTERFACE)) . 资料来源:Interop.LOGICLib 在 LOGICLib.LogicSecuredClass.Connect(字符串 IP、UInt16 值、Int32 和结果) 在 D:\MyProject\Source\Server\MyAssembly\Loader.cs 中的 My.Server.MyAssembly.Loader.Connect(): 第 461 行

应用程序 list 以启动服务的 exe 命名 - 我也试过以调用 COM DLL 的程序集命名它。我试过在命令行和通过 Visual Studio 的调试器启动。我还尝试使用第三方提供的 Interop 文件并生成我自己的文件。

(注意 - 目前我只在 Windows XP 下测试过。)

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

最佳答案

The application manifest is named after the exe that starts the service

是的,这是行不通的。 Windows 总是在 EXE 本身中寻找 list ,作为非托管资源嵌入。只有当它在那里找不到时,它才会在磁盘上寻找 .manifest 文件。问题是,使用 VS2008 及更高版本构建的托管程序已经有一个 list 。默认设置仅显示“我了解 Vista”。

您可以通过使用"file"+“打开”+"file"并选择您的 EXE 来自行验证这一点。打开 RT_MANIFEST 节点并双击资源 1。如果您在那里没有看到您的无注册 COM list 条目,那么它将无法工作。

要修复,请使用 Project + Add New Item 并选择 Application Manifest File 项目模板。您将获得样板 list ,将您的 regfree COM 条目复制并粘贴到其中。

关于c# - 在 .NET 应用程序中使用免注册 com,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4736043/

相关文章:

c# - 自动编码文本输入的策略?

winapi - 我需要在哪里切换激活上下文?

c++ - 直接显示捕获过滤器 "wrapper"

c# - 在 C# 中运行并显示富文本文件中的 exe 文件

c# - 查找 Windows 是否是没有 WMI 的 OEM

c# - 为 Material Design Android 应用程序选择哪种 Xamarin 项目类型?

C# 8.0 使用声明

.net - 使用 DataContractJsonSerializer 将 ISet<T> 序列化为 JSON

c# - 如何允许 IErrorHandlers 处理 WCF 中的 AccessViolationExceptions?

c# - 自定义 ValidationAttribute 未在 View 模型中触发 IsValid 函数调用