Método SWbemObject.ExecMethodAsync_

O método ExecMethodAsync_ de SWbemObject executa de forma assíncrona um método que um provedor de método exporta. Esse método é semelhante a SWbemServices.ExecMethodAsync, mas opera diretamente no objeto do método a ser executado. O WMI (Instrumentação de Gerenciamento do Windows) não implementa esse método. O provedor implementa esse método.

Para ver uma explicação dessa sintaxe, confira Convenções de documento para a API de script.

Sintaxe

objOutParams = .ExecMethodAsync_( _
  ByVal objWbemSink, _
  ByVal strMethodName, _
  [ ByVal objwbemInParams ], _
  [ ByVal iFlags ], _
  [ ByVal objwbemNamedValueSet ], _
  [ ByVal objWbemAsyncContext ] _
)

Parâmetros

objWbemSink [entrada]

Obrigatórios. Esse é o coletor de objeto que recebe os resultados da chamada de método. Os parâmetros de saída são enviados para o evento SWbemSink.OnObjectReady do coletor de objeto fornecido. Os resultados do mecanismo de chamada são enviados para o evento SWbemSink.OnCompleted do coletor de objeto fornecido. Observe que SWbemSink.OnCompleted não recebe o código de retorno do método. No entanto, ele recebe o código de retorno do mecanismo de retorno de chamada real e só é útil para verificar se a chamada ocorreu ou se ela falhou por motivos mecânicos. O código de resultado retornado do método é retornado no objeto de parâmetro de saída fornecido a SWbemSink.OnObjectReady. Se algum código de erro retornar, o objeto IWbemObjectSink fornecido não será usado. Se a chamada for bem-sucedida, a implementação IWbemObjectSink do usuário será chamada para indicar o resultado da operação.

strMethodName [entrada]

Obrigatórios. Esse é o nome do método para o objeto.

objwbemInParams [entrada, opcional]

Este é um objeto SWbemObject que contém os parâmetros de entrada para o método que está sendo executado. Por padrão, esse parâmetro é indefinido. Para obter mais informações, consulte Construir objetos InParameters e Analisar objetos OutParameters.

iFlags [entrada, opcional]

Inteiro que determina o comportamento da chamada. Esse parâmetro pode aceitar os valores a seguir.

wbemFlagSendStatus (128 (0x80))

Faz com que chamadas assíncronas enviem atualizações de status ao manipulador de eventos SWbemSink.OnProgress do coletor de objetos.

wbemFlagDontSendStatus (0 (0x0))

Evita que chamadas assíncronas enviem atualizações de status ao manipulador de eventos OnProgress do coletor de objetos.

objwbemNamedValueSet [entrada, opcional]

Normalmente, ele é indefinido. Caso contrário, esse será um objeto SWbemNamedValueSet cujos elementos representam as informações de contexto que podem ser usadas pelo provedor que está atendendo à solicitação. Um provedor que dê suporte ou exija essas informações deve documentar os nomes de valor reconhecidos, o tipo de dados do valor, os valores permitidos e a semântica.

objWbemAsyncContext [entrada, opcional]

Este é um objeto SWbemNamedValueSet que é retornado ao coletor de objetos para identificar a origem da chamada assíncrona original. Use esse parâmetro se estiver fazendo várias chamadas assíncronas usando o mesmo coletor de objetos. Para usar esse parâmetro, crie um objeto SWbemNamedValueSet e use o método SWbemNamedValueSet.Add para adicionar um valor que identifique a chamada assíncrona que você está fazendo. Esse objeto SWbemNamedValueSet é retornado ao coletor de objeto, e a origem da chamada pode ser extraída usando o método SWbemNamedValueSet.Item. Para obter mais informações, confira Como chamar um método.

Retornar valor

Esse método não tem valores retornados. Se a chamada for bem-sucedida, um objeto OutParameters, que também é um objeto SWbemObject, será fornecido ao coletor especificado em objWbemSink. O objeto OutParameters retornado contém os parâmetros de saída e o valor retornado para o método que está sendo executado.

Códigos do Erro

Após a conclusão do método ExecMethodAsync_, o objeto Err poderá conter um dos códigos de erro na lista a seguir.

wbemErrFailed – 2147749889 (0x80041001)

Erro não especificado.

wbemErrInvalidClass – 2147749904 (0x80041010)

A classe especificada não era válida.

wbemErrInvalidParameter – 2147749896 (0x80041008)

Um parâmetro especificado não é válido.

wbemErrOutOfMemory – 2147749894 (0x80041006)

Não há memória suficiente para concluir a operação.

wbemErrInvalidMethod – 2147749934 (0x8004102E)

O método solicitado não estava disponível.

wbemErrAccessDenied – 2147749891 (0x80041003)

O usuário atual não estava autorizado a executar o método.

Comentários

Use o método SWbemObject.ExecMethodAsync_ como uma alternativa ao acesso direto para executar um método de provedor quando não for possível executar um método diretamente. Por exemplo, se o método tiver parâmetros de saída, use o método SWbemObject.ExecMethodAsync_ com uma linguagem de script que seja compatível com parâmetros de saída. Caso contrário, é recomendável que você invoque um método usando o acesso direto. Para obter mais informações, confira Manipular informações de classe e instância.

Essa chamada é retornada imediatamente. Os objetos solicitados e o status são retornados ao chamador por meio de retornos de chamada entregues ao coletor especificado no objWbemSink. Para processar cada objeto que chegar, crie uma sub-rotina do evento objWbemSink.OnObjectReady. Depois que todos os objetos forem retornados, você poderá executar o processamento final na implementação do evento objWbemSink.OnCompleted.

Um retorno de chamada assíncrono permite que um usuário não autenticado forneça dados ao coletor. Isso representa riscos de segurança para seus scripts e aplicativos. Para eliminar os riscos, use comunicação semissíncrona ou síncrona. Para obter mais informações, consulte Chamar um método.

Se o método que está sendo executado tiver parâmetros de entrada, o objeto InParameters e o parâmetro objWbemInParam deverão ser criados conforme descrito em Construir objetos InParameters e Analisar objetos OutParameters.

O método SWbemObject.ExecMethodAsync_ pressupõe que o objeto representado por SWbemObject contém o método a ser executado. O método SWbemServices.ExecMethodAsync requer um caminho de objeto.

Exemplos

O exemplo a seguir mostra o método ExecMethodAsync. O script cria um objeto Win32_Process que representa um processo que está executando o Bloco de notas. Ele mostra a configuração do objeto InParameters e como obter resultados de um objeto OutParameters.

Para ver um script que mostra as mesmas operações executadas de maneira síncrona, consulte SWbemObject.ExecMethod. Para ver um exemplo de como usar o acesso direto, confira Criar método na classe Win32_Process. Para obter um exemplo da mesma operação usando um objeto SWbemServices, consulte SWbemServices.ExecMethodAsync.

On Error Resume Next

'Get a Win32_Process class description
Set oProcess = GetObject("winmgmts:Win32_Process")

' Create the SWbemMethod.InParameters object
' to hold the input parameter needed
' for the Win32_Process.Create method call.
' The oProcess.Methods_("Create") call
' obtains a class object that defines
' the correct input parameters
' for the Win32_Process.Create call.
' The InParameters object is an 
' SWbemObject object so SWbemObject.SpawnInstance_
' can be called to create it.
Set oInParams = oProcess.Methods_("Create"). _
    InParameters.SpawnInstance_

' Specify the name of the process to be run.
oInParams.CommandLine = "Notepad.exe"

' Create a sink to receive event resulting
' from the ExecMethodAsync call.
Set Sink = wscript.CreateObject( _
    "WbemScripting.SWbemSink", "Sink_")

' Call the Win32_Process.Create method asynchronously. Set up a 
' wait so the results of the method execution can be returned to 
' the sink subroutines.
bDone = false

' Call SWbemObject.ExecMethodAsync on the oProcess object.
oProcess.ExecMethodAsync_ Sink, "Create", oInParams, 0 
' 
while not bDone
    wscript.sleep 1000
wend

' Sink subroutines
sub Sink_OnObjectReady(oOutParams, oContext)
    wscript.echo "Sink_OnObjectReady subroutine " _
    & VBNewLine & "ReturnValue = " _
    & oOutParams.ReturnValue & VBNewLine & _
    "ProcessId = " & oOutParams.ProcessId
end sub

sub Sink_OnCompleted(HResult, LastErrorObj, oContext)
    wscript.echo "Sink_OnCompleted subroutine, hresult = " _
    & hex(HResult)
    bdone = true
end sub

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows Vista
Servidor mínimo com suporte
Windows Server 2008
Cabeçalho
Wbemdisp.h
Biblioteca de tipos
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemObject
IID
IID_ISWbemObject

Confira também

SWbemObject

SWbemServices.ExecMethodAsync