Baca dalam bahasa Inggris

Bagikan melalui


Mendaftar untuk Acara Registri Sistem

Untuk menerima notifikasi dari penyedia System Registry, aplikasi manajemen harus mendaftar sebagai pengguna sementara. Sebagian besar persyaratan untuk mendaftar ke penyedia Registri Sistem sama dengan pendaftaran peristiwa lainnya, kecuali Anda juga harus melakukan prosedur berikut.

Penyedia registri menyediakan kelas peristiwa untuk peristiwa di registri sistem. Untuk informasi selengkapnya tentang pendaftaran acara umum, lihat Menerima Acara WMI.

Prosedur berikut menjelaskan cara mendaftar untuk peristiwa registri sistem.

Untuk mendaftar acara registri sistem

  1. Panggil metode kueri pemberitahuan.

    Dalam skrip atau C++, gunakan kueri pemberitahuan seperti SWbemServices.ExecNotificationQueryAsync atau IWbemServices::ExecNotificationQueryAsync. Buat string kueri untuk parameter bstrQuery dari IWbemServices::ExecNotificationQueryAsync atau strQuery dalam skrip.

  2. Tentukan jenis peristiwa mana yang ingin Anda terima dan buat kueri.

    Tabel berikut mencantumkan kelas peristiwa registri yang bisa Anda gunakan.

    Kelas peristiwa Lokasi Hive Deskripsi
    PeristiwaRegistri N/A
    Kelas dasar abstrak untuk perubahan registri.
    RegistryTreeChangeEvent RootPath
    Memantau perubahan pada hierarki kunci.
    RegistryKeyChangeEvent KeyPath
    Memantau perubahan pada satu kunci.
    AcaraPerubahanNilaiRegistri ValueName
    Memantau perubahan pada satu nilai.

    Kelas-kelas ini memiliki properti yang disebut Hive yang mengidentifikasi hierarki kunci yang akan dipantau untuk perubahan, seperti HKEY_LOCAL_MACHINE.

    Perubahan pada hive HKEY_CLASSES_ROOT dan HKEY_CURRENT_USER tidak didukung oleh RegistryEvent atau kelas yang berasal darinya, seperti RegistryTreeChangeEvent.

  3. Buat klausa WHERE untuk pendaftaran acara Anda.

    Penyedia Registri Sistem memiliki aturan khusus untuk klausul WHERE. Untuk informasi selengkapnya, lihat Membuat Klausul WHERE yang Tepat untuk Penyedia Registri. Untuk informasi lebih lanjut secara umum tentang membuat klausa WHERE, lihat Kueri dengan WQL.

  4. Tentukan apakah konsumen Anda menerima event.

    Penyedia Registri Sistem tidak menjamin bahwa semua acara yang dikirimkan akan disampaikan. Untuk informasi selengkapnya, lihat Menerima Peristiwa Registri.

Contoh kode VBScript berikut menunjukkan cara mendeteksi perubahan registri dalam HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft hive atau subtree. Ini adalah skrip pemantauan yang, untuk tujuan demonstrasi, berjalan dalam proses bernama Wscript.exe sampai dihentikan di Task Manager, WMI dihentikan, atau sistem operasi di-boot ulang. Skrip menggunakan panggilan semisinkron ke SWbemServices.ExecNotificationQuery . Untuk informasi selengkapnya tentang panggilan semisinkron, lihat Melakukan Panggilan Semisinkron dengan VBScript.

Set wmiServices = GetObject("winmgmts:root/default") 
Set colTreeChanges = wmiServices.ExecNotificationQuery _
    ("SELECT * FROM RegistryTreeChangeEvent " _
    & "WHERE Hive='HKEY_LOCAL_MACHINE' " _
    & "AND RootPath='SOFTWARE\\Microsoft'")

While (True)
   Set TreeChange = colTreeChanges.NextEvent
   TreeChange.GetObjectText_()
   Wscript.Echo  "Hive = " & TreeChange.Hive & VBNewLine _
      & "RootPath = "& TreeChange.RootPath _
      & TreeChange.GetObjectText_()      
Wend

Contoh kode VBScript berikut menunjukkan cara memantau perubahan nilai kunci dengan mendaftar untuk jenis peristiwa penyedia registri RegistryKeyChangeEvent. Skrip memanggil metode asinkron, SWbemServices.ExecNotificationQueryAsync. Untuk informasi selengkapnya tentang panggilan dan keamanan asinkron, lihat Melakukan Panggilan Asinkron dengan VBScript.

Skrip berikut berjalan tanpa batas waktu sampai komputer di-boot ulang, WMI dihentikan, atau skrip dihentikan. Untuk menghentikan skrip secara manual, gunakan Task Manager untuk menghentikan proses. Untuk menghentikannya secara terprogram, gunakan metode Hentikan di kelas Win32_Process.

strComputer = "."
Set objWMIServices = GetObject("winmgmts:root/default") 
Set wmiSink = WScript.CreateObject( _
    "WbemScripting.SWbemSink", "SINK_") 
Set ObjRegistry = GetObject("winmgmts:_
    {impersonationLevel = impersonate}!\\" _
    & strComputer & "\root\default:StdRegProv")

' Create a new key
strPath = "SOFTWARE\MyKey\MySubKey\"
Return = objRegistry.CreateKey(HKEY_LOCAL_MACHINE, strPath)

' Start listening for change in key
objWMIServices.ExecNotificationQueryAsync wmiSink, _ 
    "SELECT * FROM RegistryKeyChangeEvent " _ 
    & "WHERE Hive='HKEY_LOCAL_MACHINE' AND " _ 
    & "KeyPath='SOFTWARE\\MyKey\\MySubKey\\'" 
WScript.Echo "Listening for Registry Change Events..." 

While(True) 
    WScript.Sleep 1000
' You can use Regedit to make a change in the key 
' HKEY_LOCAL_MACHINE\SOFTWARE\MyKey\MySubKey\ 
'    to see an event generated.
Wend 

Sub SINK_OnObjectReady(EventObject, wmiAsyncContext) 
    WScript.Echo "Received Registry Change Event" & vbCrLf & _
      EventObject.GetObjectText_() 
End Sub