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 |
|
Biblioteca de tipos |
|
DLL |
|
CLSID |
CLSID_SWbemObject |
IID |
IID_ISWbemObject |