【发布时间】:2014-12-17 14:31:56
【问题描述】:
我正在将安装脚本从 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 方法,以及如何确定该方法实际返回的内容!
【问题讨论】:
-
从另一个答案,我读到
Type.InvokeMember()使用IDispatch方法,所以你可以尝试动态调用Get()。 -
尝试改用
Dim objWMIService as Object = GetObject("winmgmts:\\.\root\cimv2")。然后你可以使用Dim objAccount as Object = objWMIService.Get("Win32_SID.SID='S-1-1-0'")。在进行后期绑定时,将所有内容声明为对象。然后,您可以在调试中单步执行代码,有时可以查看返回值。然后搜索该类型的方法/属性/等并写下你的下一行。需要做一些工作,但您不需要引用任何 dll。只是假设 dll 已注册 (COM) 或在 .Net 遵循的路径 (CLR) 中。
标签: javascript .net vb.net com wmi