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

ExecMethodAsync Method

Previous pageReturn to chapter overviewNext page

描述

 

SWbemServices对象的ExecMethodAsync方法执行由方法提供者导出的方法。该呼叫立即返回到客户端,而入站参数被转发到方法执行的适当的提供者。信息和状态通过传递到在objWbemSink中指定的接收器的事件返回给呼叫者。提供程序,而不是Windows管理规范(WMI),实现该方法。

 

该方法在异步模式下被调用。有关详细信息,请参阅调用方法.

 

PowerBASIC 语法

 

METHOD ExecMethodAsync_ ( _

BYVAL objWbemSink AS IDispatch, _

BYVAL strObjectPath AS WSTRING, _

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对象来接收对象。接收方法调用结果的对象宿。出站参数将发送到提供的对象接收器的SWbemSink.OnObjectReady事件。调用机制的结果发送到提供的对象接收器的SWbemSink.OnCompleted事件。请注意SWbemSink.OnCompleted不会收到WMI方法的返回码。然而,它接收到实际的呼叫返回机制的返回码,仅用于验证呼叫发生或由于机械原因失败。从WMI方法返回的结果代码返回给提供给SWbemSink.OnObjectReady的出站参数对象。如果返回任何错误代码,则不使用提供的IWbemObjectSink对象。如果呼叫成功,则会调用用户的IWbemObjectSink实现来指示操作的结果。

 

strObjectPath

 

需要。包含执行该方法的对象的对象路径的字符串。有关详细信息,请参阅描述WMI对象的位置.

 

strMethodName

 

需要。要执行的方法的名称。

 

objWbemInParameters

 

包含所执行方法的输入参数的SWbemObject对象。默认情况下,此参数未定义。有关详细信息,请参阅构造参数对象和解析OutParameters对象.

 

iFlags

 

确定呼叫行为的整数。此参数可以接受以下值。

 

含义

wbemFlagSendStatus

128

&H80

导致异步调用将状态更新发送到对象接收器的SWbemSink.OnProgress事件处理程序。

wbemFlagDontSendStatus

0

&H0

防止异步调用向对象接收器的OnProgress事件处理程序发送状态更新。

 

objWbemNamedValueSet

 

通常,这是未定义的。否则,这是一个SWbemNamedValueSet对象,其元素表示正在为请求提供服务的提供商可以使用的上下文信息。支持或要求此类信息的提供者必须记录识别的值名称,值的数据类型,允许的值和语义。

 

objWbemAsyncContext

 

一个返回到对象宿的SWbemNamedValueSet对象,用于标识原始异步调用的源。如果使用相同的对象接收器进行多个异步调用,请使用此参数。要使用此参数,请创建一个SWbemNamedValueSet对象,并使用SWbemNamedValueSet.Add方法添加一个标识您正在进行的异步调用的值。此SWbemNamedValueSet对象返回到对象接收器,可以使用SWbemNamedValueSet.Item方法提取调用的源。有关详细信息,请参阅用VBScript进行异步调用.

 

返回值

 

此方法没有返回值。如果呼叫成功,则OutParameters对象(也是SWbemObject)提供给objWbemSink中指定的接收器。返回的OutParameters对象包含正在执行的方法的输出参数和返回值。有关详细信息,请参阅构造参数对象和解析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对象获取结果。对于同步执行相同操作的脚本,请参阅SWbemServices.ExecMethod.有关使用直接访问的示例,请参阅在Win32_Process类中创建方法.有关使用SWbemObject的相同操作的示例,请参阅SWbemObject.ExecMethodAsync.

 

'连接到WMI。

set Services = getobject(“winmgmts:root \\ cimv2”)

 

'获取类定义对象

的一个Win32_Process对象。

设置oProcess = Services.Get( “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调用。

设置Sink = wscript.CreateObject(_

 “WbemScripting.SWbemSink”,“Sink_”)

 

'调用SWbemServices.ExecMethodAsync

'与WMI路径Win32_Process。

 

bDone = false

Services.ExecMethodAsync Sink,_

  “Win32_Process”,“创建”,oInParams

 

'异步调用Win32_Process.Create方法。

'设置一个等待所以方法的结果

'执行可以返回到

'接收器子程序。

 

而不是bDone  

 wscript.sleep 1000

WEND

 

'Sink子程序

sub Sink_OnObjectReady(oOutParams,oContext)

 wscript.echo“Sink_OnObjectReady子例程”_

   &VBCR &“ReturnValue =”_

   &oOutParams.ReturnValue &VBCR &_

   “ProcessId =”&oOutParams.ProcessId

结束子

 

sub Sink_OnCompleted(HResult,LastErrorObj,oContext)

 wscript.echo“Sink_OnCompleted子程序,hresult =”_

   &hex(HResult)

 bdone = true

结束子

 

备注

 

如果执行的方法具有输入参数,则objWbemInParam参数中的InParameters对象必须与构造参数对象和解析OutParameters对象主题中的描述相同。

 

当不可能直接执行方法时,使用SWbemServices.ExecMethodAsync作为执行提供者方法的直接访问的替代方法。例如,使用不支持输出参数的脚本语言(如JScript),即如果您的方法具有OUT参数。否则,建议您使用直接访问来调用方法。有关详细信息,请参阅操纵类和实例信息.

 

SWbemServices.ExecMethodAsync方法需要一个对象路径。如果脚本已经包含SWbemObject对象,则可以调用SWbemObject.ExecMethodAsync.

 

此通话立即返回。状态信息通过在objWbemSink中指定的传送到汇点的回拨返回给主叫方。要在呼叫完成时继续处理,请执行objWbemSinkOnCompleted事件的子例程。

 

异步回调允许非验证用户向sink提供数据。这对您的脚本和应用程序造成安全隐患。有关如何消除风险的更多信息,请参阅设置异步调用的安全性.

 

使用objWbemAsyncContext参数验证通话来源。

 

要求

 

客户

需要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。