Метод SWbemObject.ExecMethodAsync_
Метод ExecMethodAsync_SWbemObject асинхронно выполняет метод, экспортируемый поставщиком метода. Этот метод аналогичен SWbemServices.ExecMethodAsync, но работает непосредственно с объектом выполняемого метода. Инструментарий управления Windows (WMI) не реализует этот метод. Поставщик реализует этот метод.
Описание этого синтаксиса см. в разделе Соглашения о документах для API сценариев.
Синтаксис
objOutParams = .ExecMethodAsync_( _
ByVal objWbemSink, _
ByVal strMethodName, _
[ ByVal objwbemInParams ], _
[ ByVal iFlags ], _
[ ByVal objwbemNamedValueSet ], _
[ ByVal objWbemAsyncContext ] _
)
Параметры
-
objWbemSink [in]
-
Обязательный. Это приемник объекта, который получает результаты вызова метода. Исходящие параметры отправляются в событие SWbemSink.OnObjectReady предоставленного приемника объекта. Результаты механизма вызова отправляются в событие SWbemSink.OnCompleted предоставленного приемника объекта. Обратите внимание, что SWbemSink.OnCompleted не получает код возврата метода . Однако он получает код возврата фактического механизма возврата вызовов и полезен только для проверки того, что вызов произошел или что он завершился сбоем по механическим причинам. Код результата, возвращенный методом , возвращается в объекте исходящего параметра, предоставленном SWbemSink.OnObjectReady. Если возвращается какой-либо код ошибки, предоставленный объект IWbemObjectSink не используется. Если вызов выполнен успешно, вызывается реализация IWbemObjectSink пользователя, чтобы указать результат операции.
-
strMethodName [in]
-
Обязательный. Это имя метода для объекта .
-
objwbemInParams [in, необязательно]
-
Это объект SWbemObject , содержащий входные параметры для выполняемого метода. По умолчанию этот параметр не определен. Дополнительные сведения см. в разделах Создание объектов InParameters и Анализ объектов OutParameters.
-
iFlags [in, необязательный]
-
Целое число, определяющее поведение вызова. Этот параметр может принимать следующие значения.
-
wbemFlagSendStatus (128 (0x80))
-
Вызывает асинхронные вызовы для отправки обновлений состояния в обработчик событий SWbemSink.OnProgress для приемника объекта.
-
wbemFlagDontSendStatus (0 (0x0))
-
Запрещает асинхронным вызовам отправлять обновления состояния в обработчик событий OnProgress для приемника объектов.
objwbemNamedValueSet [in, необязательный]
Как правило, он не определен. В противном случае это объект SWbemNamedValueSet , элементы которого представляют сведения контекста, которые могут использоваться поставщиком, обслуживающим запрос. Поставщик, поддерживающий или требующий таких сведений, должен документировать имена распознаваемых значений, тип данных значения, допустимые значения и семантику.
objWbemAsyncContext [in, необязательно]
Это объект SWbemNamedValueSet , который возвращается в приемник объекта для определения источника исходного асинхронного вызова. Используйте этот параметр, если выполняете несколько асинхронных вызовов с использованием одного и того же приемника объектов. Чтобы использовать этот параметр, создайте объект SWbemNamedValueSet и используйте метод SWbemNamedValueSet.Add , чтобы добавить значение, определяющее асинхронный вызов, который вы выполняете. Этот объект SWbemNamedValueSet возвращается в приемник объекта, а источник вызова можно извлечь с помощью метода SWbemNamedValueSet.Item . Дополнительные сведения см. в разделе Вызов метода .
Возвращаемое значение
Этот метод не имеет возвращаемых значений. Если вызов выполнен успешно, объект OutParameters , который также является объектом SWbemObject , предоставляется приемнику, указанному в objWbemSink. Возвращенный объект OutParameters содержит выходные параметры и возвращаемое значение для выполняемого метода.
Коды ошибок
После завершения метода ExecMethodAsync_ объект Err может содержать один из кодов ошибок в следующем списке.
-
wbemErrFailed — 2147749889 (0x80041001)
-
Незаданная ошибка.
-
wbemErrInvalidClass — 2147749904 (0x80041010)
-
Указанный класс недопустим.
-
wbemErrInvalidParameter — 2147749896 (0x80041008)
-
Указанный параметр недопустим.
-
wbemErrOutOfMemory — 2147749894 (0x80041006)
-
Недостаточно памяти для завершения операции.
-
wbemErrInvalidMethod — 2147749934 (0x8004102E)
-
Запрошенный метод недоступен.
-
wbemErrAccessDenied — 2147749891 (0x80041003)
-
Текущий пользователь не был авторизован для выполнения метода .
Комментарии
Используйте метод SWbemObject.ExecMethodAsync_ в качестве альтернативы прямому доступу для выполнения метода поставщика , если невозможно выполнить метод напрямую. Например, если у метода есть параметры out, используйте метод SWbemObject.ExecMethodAsync_ с языком сценариев, который не поддерживает выходные параметры. В противном случае рекомендуется вызывать метод с помощью прямого доступа. Дополнительные сведения см. в разделе Управление сведениями о классах и экземплярах.
Этот вызов возвращается немедленно. Запрошенные объекты и состояние возвращаются вызывающей объекту с помощью обратных вызовов, доставленных в приемник, указанный в objWbemSink. Чтобы обработать каждый объект при его поступлении, создайте objWbemSink. Подпрограмма события OnObjectReady . После возврата всех объектов можно выполнить окончательную обработку в реализации objWbemSink. Событие OnCompleted .
Асинхронный обратный вызов позволяет пользователю, не прошедшему проверку подлинности, предоставлять данные в приемник. Это создает угрозу безопасности для сценариев и приложений. Чтобы избежать рисков, используйте полусинхронный или синхронный обмен данными. Дополнительные сведения см. в разделе Вызов метода .
Если выполняемый метод имеет входные параметры, необходимо создать объект InParameters и параметр objWbemInParam , как описано в разделе Создание объектов InParameters и анализ объектов OutParameters.
Метод SWbemObject.ExecMethodAsync_ предполагает, что объект, представленный SWbemObject , содержит метод для выполнения. Для метода SWbemServices.ExecMethodAsync требуется путь к объекту.
Примеры
В следующем примере показан метод ExecMethodAsync . Скрипт создает объект Win32_Process , представляющий процесс, в котором выполняется Блокнот. Здесь показано, как настроить объект InParameters и как получить результаты из объекта OutParameters .
Скрипт, который показывает те же операции, которые выполняются синхронно, см. в статье SWbemObject.ExecMethod. Пример использования прямого доступа см. в разделе Создание метода в классе Win32_Process. Пример той же операции с использованием объекта SWbemServices см. в разделе 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
Требования
Требование | Значение |
---|---|
Минимальная версия клиента |
Windows Vista |
Минимальная версия сервера |
Windows Server 2008 |
Заголовок |
|
Библиотека типов |
|
DLL |
|
CLSID |
CLSID_SWbemObject |
IID |
IID_ISWbemObject |