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

时间:2014-12-17 14:31:56

标签: javascript .net vb.net com wmi

我正在将安装脚本从js迁移到vb.net,我遇到了以下问题。 我遇到问题因为JS是后期绑定的,所以我需要研究每种方法返回的数据类型,以便在vb.net中创建强类型对应物(或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方法,以及如何确定此方法实际返回的内容!

1 个答案:

答案 0 :(得分:0)

我结束了史蒂夫在答案中所说的话,它解决了我的问题。我对运行时延迟绑定不是很满意,但它完成了工作!

供参考:

  

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

相关问题