Bagikan melalui


metode SWbemObject.ExecMethodAsync_

Metode ExecMethodAsync_SWbemObject secara asinkron menjalankan metode yang diekspor penyedia metode. Metode ini mirip dengan SWbemServices.ExecMethodAsync, tetapi beroperasi langsung pada objek metode yang akan dijalankan. Instrumentasi Manajemen Windows (WMI) tidak menerapkan metode ini. Penyedia menerapkan metode ini.

Untuk penjelasan tentang sintaks ini, lihat Konvensi Dokumen untuk Scripting API.

Sintaks

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

Parameter

objWbemSink [in]

Wajib diisi. Ini adalah sink objek yang menerima hasil panggilan metode. Parameter keluar dikirim ke peristiwa SWbemSink.OnObjectReady dari sink objek yang disediakan. Hasil mekanisme panggilan dikirim ke peristiwa SWbemSink.OnCompleted dari sink objek yang disediakan. Perhatikan bahwa SWbemSink.OnCompleted tidak menerima kode pengembalian metode. Namun, ia menerima kode pengembalian mekanisme pengembalian panggilan aktual, dan hanya berguna untuk memverifikasi bahwa panggilan terjadi, atau bahwa panggilan gagal karena alasan mekanis. Kode hasil yang dikembalikan dari metode dikembalikan dalam objek parameter keluar yang disediakan ke SWbemSink.OnObjectReady. Jika ada kode kesalahan yang dikembalikan, maka objek IWbemObjectSink yang disediakan tidak digunakan. Jika panggilan berhasil, implementasi IWbemObjectSink pengguna dipanggil untuk menunjukkan hasil operasi.

strMethodName [in]

Wajib diisi. Ini adalah nama metode untuk objek .

objwbemInParams [in, opsional]

Ini adalah objek SWbemObject yang berisi parameter input untuk metode yang dijalankan. Secara default, parameter ini tidak terdefinisi. Untuk informasi selengkapnya, lihat Membuat Objek InParameters dan Mengurai Objek OutParameters.

iFlags [in, opsional]

Bilangan bulat yang menentukan perilaku panggilan. Parameter ini dapat menerima nilai berikut.

wbemFlagSendStatus (128 (0x80))

Menyebabkan panggilan asinkron mengirim pembaruan status ke penanganan aktivitas SWbemSink.OnProgress untuk sink objek.

wbemFlagDontSendStatus (0 (0x0))

Mencegah panggilan asinkron mengirim pembaruan status ke penanganan aktivitas OnProgress untuk sink objek.

objwbemNamedValueSet [in, opsional]

Biasanya, itu tidak ditentukan. Jika tidak, ini adalah objek SWbemNamedValueSet yang elemennya mewakili informasi konteks yang dapat digunakan oleh penyedia yang melayani permintaan. Penyedia yang mendukung atau memerlukan informasi tersebut harus men dokumentasikan nama nilai yang dikenali, jenis data nilai, nilai yang diizinkan, dan semantik.

objWbemAsyncContext [in, opsional]

Ini adalah objek SWbemNamedValueSet yang kembali ke sink objek untuk mengidentifikasi sumber panggilan asinkron asli. Gunakan parameter ini jika Anda melakukan beberapa panggilan asinkron menggunakan sink objek yang sama. Untuk menggunakan parameter ini, buat objek SWbemNamedValueSet dan gunakan metode SWbemNamedValueSet.Add untuk menambahkan nilai yang mengidentifikasi panggilan asinkron yang Anda buat. Objek SWbemNamedValueSet ini dikembalikan ke sink objek dan sumber panggilan dapat diekstrak menggunakan metode SWbemNamedValueSet.Item . Untuk informasi selengkapnya, lihat Memanggil Metode.

Nilai kembali

Metode ini tidak memiliki nilai pengembalian. Jika panggilan berhasil, objek OutParameters , yang juga merupakan objek SWbemObject , diberikan ke sink yang ditentukan dalam objWbemSink. Objek OutParameters yang dikembalikan berisi parameter output dan nilai pengembalian untuk metode yang sedang dijalankan.

Kode kesalahan

Setelah menyelesaikan metode ExecMethodAsync_ , objek Err mungkin berisi salah satu kode kesalahan dalam daftar berikut.

wbemErrFailed - 2147749889 (0x80041001)

Kesalahan yang tidak ditentukan.

wbemErrInvalidClass - 2147749904 (0x80041010)

Kelas yang ditentukan tidak valid.

wbemErrInvalidParameter - 2147749896 (0x80041008)

Parameter yang ditentukan tidak valid.

wbemErrOutOfMemory - 2147749894 (0x80041006)

Memori tidak cukup untuk menyelesaikan operasi.

wbemErrInvalidMethod - 2147749934 (0x8004102E)

Metode yang diminta tidak tersedia.

wbemErrAccessDenied - 2147749891 (0x80041003)

Pengguna saat ini tidak berwenang untuk menjalankan metode.

Keterangan

Gunakan metode SWbemObject.ExecMethodAsync_ sebagai alternatif untuk akses langsung untuk menjalankan metode penyedia ketika Anda tidak dapat menjalankan metode secara langsung. Misalnya, jika metode Anda memiliki parameter, gunakan metode SWbemObject.ExecMethodAsync_ dengan bahasa skrip yang tidak mendukung parameter output. Jika tidak, disarankan agar Anda memanggil metode menggunakan akses langsung. Untuk informasi selengkapnya, lihat Memanipulasi Informasi Kelas dan Instans.

Panggilan ini segera kembali. Objek dan status yang diminta dikembalikan ke pemanggil melalui panggilan balik yang dikirimkan ke sink yang ditentukan dalam objWbemSink. Untuk memproses setiap objek saat tiba, buat objWbemSink. Subroutine peristiwa OnObjectReady . Setelah semua objek dikembalikan, Anda dapat melakukan pemrosesan akhir dalam implementasi objWbemSink Anda. Peristiwa OnCompleted .

Panggilan balik asinkron memungkinkan pengguna yang tidak diautentikasi untuk menyediakan data ke sink. Ini menimbulkan risiko keamanan pada skrip dan aplikasi Anda. Untuk menghilangkan risiko, gunakan komunikasi semisinkron atau komunikasi sinkron. Untuk informasi selengkapnya, lihat Memanggil Metode.

Jika metode yang dijalankan memiliki parameter input, objek InParameters dan parameter objWbemInParam harus dibangun seperti yang dijelaskan dalam Membuat Objek InParameters dan Mengurai Objek OutParameters.

Metode SWbemObject.ExecMethodAsync_ mengasumsikan objek yang diwakili oleh SWbemObject berisi metode untuk dijalankan. Metode SWbemServices.ExecMethodAsync memerlukan jalur objek.

Contoh

Contoh berikut menunjukkan metode ExecMethodAsync . Skrip membuat objek Win32_Process yang mewakili proses yang menjalankan Notepad. Ini menunjukkan pengaturan objek InParameters , dan cara mendapatkan hasil dari objek OutParameters .

Untuk skrip yang menunjukkan operasi yang sama dilakukan secara sinkron, lihat SWbemObject.ExecMethod. Untuk contoh menggunakan akses langsung, lihat Membuat Metode di Win32_Process Kelas. Untuk contoh operasi yang sama menggunakan objek SWbemServices , lihat 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

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows Vista
Server minimum yang didukung
Windows Server 2008
Header
Wbemdisp.h
Pustaka jenis
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemObject
IID
IID_ISWbemObject

Lihat juga

SWbemObject

SWbemServices.ExecMethodAsync