勇芳软件工作室.汉化:  Windows Management Instrumentation > Scripting API for WMI > Scripting API Objects > SWbemObject >

ExecMethodAsync_ Method

Previous pageReturn to chapter overviewNext page

描述

 

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。