描述
ExecMethodAsync_的ExecMethodAsync_方法异步执行方法提供程序导出的方法。此方法类似于SWbemServices.ExecMethodAsync,但直接作用于要执行的方法的对象。Windows Management Instrumentation(WMI)不实现此方法。提供程序实现此方法。
PowerBASIC 语法
METHOD ExecMethodAsync_ ( _ BYVAL objWbemSink AS IDispatch, _ BYVAL strMethodName AS WSTRING, _ OPTIONAL BYVAL objWbemInParameters AS IDispatch, _ OPTIONAL BYVAL iFlags AS LONG, _ OPTIONAL BYVAL objWbemNamedValueSet AS IDispatch, _ OPTIONAL BYVAL objWbemAsyncContext AS IDispatch _ ) |
参数
objWbemSink
需要。这是接收方法调用结果的对象接收器。出站参数将发送到提供的对象接收器的SWbemSink.OnObjectReady事件。调用机制的结果发送到提供的对象接收器的SWbemSink.OnCompleted事件。请注意SWbemSink.OnCompleted不会收到该方法的返回码。然而,它接收到实际的呼叫返回机制的返回码,仅用于验证呼叫发生,或者由于机械原因而失败。从方法返回的结果代码返回给提供给SWbemSink.OnObjectReady的出站参数对象。如果返回任何错误代码,则不使用提供的IWbemObjectSink对象。如果呼叫成功,则调用用户的IWbemObjectSink实现来指示操作的结果。
strMethodName
需要。这是对象的方法的名称。
objWbemInParameters
这是一个SWbemObject对象,其中包含正在执行的方法的输入参数。默认情况下,此参数未定义。有关详细信息,请参阅构造参数对象和解析OutParameters对象.
iFlags
确定呼叫行为的整数。此参数可以接受以下值。
值 |
含义 |
wbemFlagSendStatus 128 &H80 |
导致异步调用将状态更新发送到对象接收器的SWbemSink.OnProgress事件处理程序。 |
wbemFlagDontSendStatus 0 &H0 |
防止异步调用将状态更新发送到对象接收器的OnProgress事件处理程序。 |
objWbemNamedValueSet
通常,它是未定义的。否则,这是一个SWbemNamedValueSet对象,其元素表示正在为请求提供服务的提供者可以使用的上下文信息。支持或要求此类信息的提供者必须记录识别的值名称,值的数据类型,允许的值和语义。
objWbemAsyncContext
这是一个SWbemNamedValueSet对象,返回到对象接收器以识别原始异步调用的源。如果使用相同的对象接收器进行多个异步调用,请使用此参数。要使用此参数,请创建一个SWbemNamedValueSet对象,并使用SWbemNamedValueSet.Add方法添加一个标识您正在进行的异步调用的值。该SWbemNamedValueSet对象返回到对象接收器,可以使用SWbemNamedValueSet.Item方法提取调用的源。有关详细信息,请参阅调用方法.
返回值
此方法没有返回值。如果呼叫成功,OutParameters对象(也是一个SWbemObject对象)提供给objWbemSink中指定的接收器。返回的OutParameters对象包含正在执行的方法的输出参数和返回值。
OBJRESULT
错误(名称/十进制/十六进制) |
含义 |
wbemErrFailed -2147217407 &H80041001 |
未指定错误 |
wbemErrInvalidClass -2147217392 &H80041010 |
指定的类不存在。 |
wbemErrInvalidParameter -2147217400 &H80041008 |
指定了无效参数。 |
wbemErrOutOfMemory -2147217402 &H80041006 |
没有足够的内存来完成操作。 |
wbemErrInvalidMethod -2147217362 &H8004102E |
请求方法不可用。 |
wbemErrAccessDenied -2147217405 0x80041003 |
当前用户未被授权执行该方法。 |
示例代码
以下示例显示ExecMethodAsync方法。该脚本创建一个表示正在运行记事本的进程的Win32_Process对象。它显示设置InParameters对象,以及如何从OutParameters对象获取结果。
在错误恢复下一步
'获取一个Win32_Process类的描述
设置oProcess = GetObject(“winmgmts:Win32_Process”)
'创建SWbemMethod.InParameters对象
'保存所需的输入参数
'为Win32_Process.Create方法调用。
'oProcess.Methods _(“Create”)调用en
'获取定义的类对象
'输入参数正确
'为Win32_Process.Create调用。
'InParameters对象是一个
'SWbemObject对象所以SWbemObject.SpawnInstance_
可以调用它来创建它。
设置oInParams oProcess.Methods = _( “创建”)。_
InParameters.SpawnInstance_
'指定要运行的进程的名称。
oInParams.CommandLine =“Notepad.exe”
'创建一个接收器来接收事件
'从ExecMethodAsync调用。
Set Sink = wscript.CreateObject(_
“WbemScripting.SWbemSink”,“Sink_”)
'异步调用Win32_Process.Create方法。设立一个
'等等,所以方法执行的结果可以返回到
'接收器子程序。
bDone = false
在对象上“呼叫SWbemObject.ExecMethodAsync oProcess。
oProcess.ExecMethodAsync_水槽, “创建”,oInParams,0pl
'
而不是bDone
wscript.sleep 1000
WEND
'Sink子程序
sub Sink_OnObjectReady(oOutParams,oContext)
wscript.echo“Sink_OnObjectReady子例程”_
&VBNewLine &“ReturnValue =”_
&oOutParams.ReturnValue &VBNewLine &_
“ProcessId =”&oOutParams.ProcessId
结束子
sub Sink_OnCompleted(HResult,LastErrorObj,oContext)
wscript.echo“Sink_OnCompleted子程序,hresult =”_
&hex(HResult)
bdone = true
结束子
备注
当您无法直接执行方法时,使用SWbemObject.ExecMethodAsync_方法作为直接访问执行提供者方法的替代方法。例如,如果您的方法具有参数,请使用不支持输出参数的脚本语言(如JScript)的SWbemObject.ExecMethodAsync_方法。否则,建议您使用直接访问调用方法。有关详细信息,请参阅操纵类和实例信息.
此通话立即返回。所请求的对象和状态通过传递给objWbemSink中指定的接收器的回调返回给呼叫者。要处理每个对象到达时,创建一个OnObjectReadyOnObjectReady事件子例程。返回所有对象后,您可以执行objWbemSinkOnCompleted事件的最终处理。
异步回调允许非验证用户向sink提供数据。这对您的脚本和应用程序造成安全隐患。为了消除风险,请使用半异步通信或同步通信。有关详细信息,请参阅调用方法.
如果正在执行的方法具有输入参数,则InParameters对象和objWbemInParam参数必须按“构造InParameters对象和解析OutParameters对象”中所述进行构造。
SWbemObject.ExecMethodAsync_方法假定由SWbemObject表示的对象包含要执行的方法。SWbemServices.ExecMethodAsync方法需要一个对象路径。
要求
客户 |
需要Windows Vista,Windows XP,Windows 2000 Professional,Windows NT Workstation 4.0 SP4及更高版本,Windows Me,Windows 98或Windows 95 OSR2及更高版本。 |
服务器 |
需要Windows Server 2008,Windows Server 2003,Windows 2000 Server或Windows NT Server 4.0 SP4及更高版本。 |
类型库 |
使用Wbemdisp.tlb。 |
头 |
Wbemdisp.inc。 |
DLL |
需要Wbemdisp.dll。 |


