从未引用的程序集中调用 COM 方法

Calling COM methods from unreferenced assemblies

本文关键字:集中 调用 COM 方法 程序集 程序 引用      更新时间:2023-09-26

我正在将安装脚本从 js 迁移到 vb.net,我遇到了以下问题。我遇到了问题,因为 JS 是后期绑定的,所以我需要研究每个方法返回的数据类型,以便在 vb.net(或 C#(中制作强类型对应项(或 C#(

在原始的js安装脚本中,我到了不知道如何移植这2个调用的地步:

var objWMIService = GetObject("winmgmts:''''.''root''cimv2");
var objAccount = objWMIService.Get("Win32_SID.SID='S-1-1-0'");

如果我离开数据类型推断,我会得到 COMType,所以我无法从生成的对象调用 Get 方法。我想我可以通过使用 IDispatch 来解决这个问题,但是自从我使用 IDispatch 以来已经有 10 年了,我无法确切地补救如何做到这一点。

此外,经过进一步的研究,我发现内部COM实际上是一个SWBemServicesEX对象,我不知道该引用什么才能生成COM互操作系统。

如果有人能为这个问题提供任何想法或解决方案,我将不胜感激。

当前 vb.NET 代码只是:

Dim objWMIService = GetObject("winmgmts:''.'root'cimv2")

不知道如何能够从objWMIService调用Get方法,以及如何确定此方法实际返回的内容!

我结束了史蒂夫在他的回答中所说的,它为我解决了这个问题。我对运行时后期绑定不是很满意,但它可以完成工作!

供参考:

尝试使用 Dim objWMIService 作为对象 = GetObject("winmgmts:''.''root''cimv2"( 代替。然后你可以使用 Dim objAccount 作为对象 = objWMIService.Get("Win32_SID.SID='S-1-1-0'"(。执行后期绑定时,将所有内容声明为对象。然后,您可以在调试中单步执行代码,有时还可以查看返回的内容。然后搜索该类型的方法/属性/等并编写下一行。需要一点工作,但您不需要引用任何 dll。只有一个假设,即 dll 已注册 (COM( 或在您的路径中 .Net 遵循 (CLR(