Bagikan melalui


Mendaftar dan Mendistribusikan Penangan Properti

Topik ini menjelaskan cara membuat dan mendaftarkan penangan properti untuk bekerja dengan sistem properti Windows.

Topik ini diatur sebagai berikut:

Mendaftar dan Mendistribusikan Penangan Properti

Setelah handler properti diimplementasikan, handler harus didaftarkan dan ekstensi nama filenya harus dikaitkan dengan handler. Contoh berikut menggunakan ekstensi .recipe mengilustrasikan entri registri yang diperlukan untuk melakukannya.

HKEY_CLASSES_ROOT
   CLSID
      {50d9450f-2a80-4f08-93b9-2eb526477d1a}
         (Default) = Recipe Property Handler
         ManualSafeSave [REG_DWORD] = 00000001
         InProcServer32
            (Default) = C:\\SDK\\PropertyHandlerSample\\bin\\RecipeHandlers.dll
            ThreadingModel = Apartment
HKEY_LOCAL_MACHINE
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               PropertySystem
                  PropertyHandlers
                     .recipe
                        (Default) = {50d9450f-2a80-4f08-93b9-2eb526477d1a}

Penangan properti untuk jenis file tertentu biasanya didistribusikan dengan aplikasi yang membuat atau memanipulasi file jenis tersebut. Namun, Anda juga harus mempertimbangkan untuk membuat penangan properti Anda tersedia secara independen dari aplikasi ini untuk mendukung pengindeksan jenis file Anda dalam skenario server di mana penangan properti digunakan oleh pengindeks, tetapi aplikasi yang menyertainya tidak diperlukan. Jika Anda membuat paket penginstalan yang berdiri sendiri untuk handler properti Anda, pastikan paket tersebut menyertakan yang berikut ini:

  • Detail pendaftaran handler properti yang ditentukan dalam topik Mendaftarkan dan Mendistribusikan Penangan Properti.
  • Pendaftaran untuk jenis file Anda dan file skema apa pun yang harus diinstal, untuk memungkinkan klien mengakses semua fitur handler properti Anda.

Pertimbangan Performa dan Keandalan untuk Penangan Properti

Penangan properti dipanggil untuk setiap file pada komputer tertentu. Mereka biasanya dipanggil dalam keadaan berikut:

  • Selama pengindeksan file. Ini dilakukan di luar proses, dalam proses terisolasi dengan hak terbatas.
  • Ketika file diakses di Windows Explorer untuk tujuan membaca dan menulis nilai properti. Ini dilakukan dalam proses.

Panduan Performa dan Keandalan

Kapan saja, pengguna mungkin memiliki puluhan ribu file dengan jenis tertentu (termasuk milik Anda) di komputernya, dan dapat mengakses atau memodifikasi salah satu atau semua file ini kapan saja. Karena handler properti sering dipanggil untuk mendukung akses ini dan memodifikasi operasi, karakteristik performa dan keandalan handler properti Anda di lingkungan yang sibuk dan sangat bersamaan sangat penting.

Ingatlah panduan berikut saat Anda mengembangkan dan menguji penangan properti Anda.

  • Enumerasi properti

    Handler properti harus memiliki waktu respons yang sangat cepat dalam menghitung properti mereka. Perhitungan intensif memori dari nilai properti, pencarian jaringan, atau pencarian sumber daya selain file itu sendiri harus dihindari untuk memastikan waktu respons yang cepat.

  • Penulisan properti di tempat

    Jika memungkinkan, saat berhadapan dengan file berukuran sedang atau besar (beberapa ratus KB atau lebih besar), format file harus diatur sehingga membaca atau menulis nilai properti tidak perlu membaca seluruh file dari disk. Bahkan jika file perlu dicari, file tidak boleh dibaca ke dalam memori secara keseluruhan karena file-file ini mengasapi kumpulan Windows Explorer atau pengindeks Windows Search saat mereka mencoba mengakses atau mengindeks file-file ini. Untuk informasi selengkapnya, lihat Menginisialisasi Penangan Properti.

    Salah satu teknik yang berguna untuk mencapainya adalah dengan memasang header file dengan ruang ekstra sehingga lain kali nilai properti perlu ditulis, nilai dapat ditulis di tempat tanpa perlu menulis ulang seluruh file. Ini memerlukan fungsionalitas ManualSafeSave. Pendekatan ini melibatkan beberapa risiko tambahan bahwa operasi penulisan file mungkin terganggu saat penulisan sedang berlangsung (karena crash sistem atau kehilangan daya), tetapi karena ukuran properti umumnya kecil, kemungkinan gangguan seperti itu juga kecil, dan keuntungan performa yang dapat diwujudkan melalui penulisan properti di tempat dianggap cukup signifikan untuk membenarkan risiko tambahan ini. Meskipun demikian, Anda harus berhati-hati untuk menguji implementasi Anda secara ekstensif untuk memastikan bahwa file Anda tidak rusak jika kegagalan muncul dalam operasi tulis.

    Terakhir, saat menerapkan penulisan properti di tempat dengan ManualSafeSave, terkadang operasi tidak dapat dilakukan di tempat, dan seluruh aliran harus ditulis ulang. Untuk memfasilitasi penulisan ulang, aliran yang disediakan selama inisialisasi handler mendukung antarmuka IDestinationStreamFactory . Antarmuka IDestinationStreamFactory memungkinkan implementasi handler untuk mendapatkan aliran sementara untuk menulis; ketika semua penulisan selesai dan metode IDestinationStreamFactory::GetDestinationStream dipanggil, aliran ini digunakan untuk sepenuhnya menggantikan aliran file asli. Ketika aliran tujuan digunakan, aliran file asli harus diperlakukan sebagai baca-saja, karena akan digantikan oleh aliran tujuan setelah metode IDestinationStreamFactory::GetDestinationStream telah dipanggil.

  • Memilih model utas COM Anda

    Untuk memaksimalkan efisiensi handler properti Anda, Anda harus menentukan bahwa ia menggunakan model Bothutas COM . Ini memungkinkan akses langsung dari apartemen STA (Windows Explorer, misalnya) dan apartemen agen transfer pesan (MTA) (proses SearchProtocolHost di Windows Search, misalnya), menghindari overhead marshaling di lingkungan tersebut. Untuk mencapai manfaat penuh dari Both model utas, layanan apa pun yang bergantung pada handler Anda juga harus ditetapkan Both untuk menghindari marshaling dalam panggilan ke komponen tersebut. Periksa dokumentasi layanan khusus ini untuk memverifikasi apakah mereka menggunakan model utas ini.

  • Konkurensi handler properti

    Handler properti dan antarmuka IPropertyStore dirancang untuk serial daripada akses bersamaan. Windows Explorer, pengindeks Windows Search, dan semua pemanggilan handler properti lainnya dari basis kode Windows menjamin penggunaan ini. Seharusnya tidak ada alasan bagi pihak ketiga untuk menggunakan penangan properti secara bersamaan, tetapi perilaku ini tidak dapat dijamin. Selain itu, meskipun pola panggilan diharapkan serial, panggilan mungkin datang pada utas yang berbeda (misalnya, ketika objek dipanggil dari jarak jauh melalui COM RPC, seperti yang terjadi di pengindeks). Oleh karena itu, implementasi handler properti harus mendukung dipanggil pada utas yang berbeda, dan idealnya tidak boleh menderita efek sakit ketika dipanggil secara bersamaan. Karena pola panggilan yang dimaksudkan bersifat serial, implementasi sepele menggunakan bagian penting harus cukup untuk memenuhi persyaratan ini dalam banyak kasus. Hal ini dapat diterima untuk menghindari pemblokiran pada panggilan bersamaan dengan menggunakan fungsi TryEnterCriticalSection untuk mendeteksi dan gagal panggilan bersamaan.

  • Konkurensi file

    Handler properti sering digunakan dalam skenario di mana beberapa aplikasi mengakses file secara bersamaan. Oleh karena itu, handler dan aplikasi perlu mengelola konkurensi dengan menentukan mode berbagi yang sesuai saat membuka file. Mereka juga perlu menyadari akses yang ditentukan aplikasi lain dan untuk mengelola kasus di mana akses tidak diizinkan. Yang terbaik adalah jika semua konsumen menentukan mode berbagi liberal untuk memungkinkan orang lain mengakses file secara bersamaan, tetapi ketika melakukan ini, masalah konsistensi perlu dikelola. Keputusan tentang mode berbagi yang paling tepat untuk digunakan perlu dibuat dalam konteks komunitas aplikasi yang mengakses file.

    Sistem file memungkinkan aplikasi untuk membuka file dengan cara yang memberi mereka kontrol atas apakah dan bagaimana aplikasi lain dapat membuka file. Mode berbagi memungkinkan akses baca, tulis, dan hapus. Sistem properti mendukung subset mode berbagi ini, yang diuraikan dalam tabel berikut.

    Mode akses Mode berbagi
    Write Tolak pembaca dan penulis lain
    Tulis (EnableShareDenyWrite) Aktifkan pembaca lain, tolak penulis lain
    Baca-saja (default) Aktifkan pembaca lain, tolak penulis lain
    Baca-saja (EnableShareDenyNone) Aktifkan pembaca dan penulis lain

     

    Penangan properti yang terbuka untuk penulisan (GPS_READWRITE) akan menolak pembaca dan penulis lain. Handler dapat memilih perilaku yang memungkinkan pembaca dengan menentukan EnableShareDenyWrite bendera (menyiratkan aktifkan Baca) dalam pendaftarannya.

    Penangan properti terbuka untuk dibaca (GPS_DEFAULT), secara default mengaktifkan pembaca lain tetapi menolak penulis lain. Handler dapat memilih untuk mengaktifkan penulis lain dengan menentukan EnableShareDenyNone bendera dalam pendaftarannya. Ini berarti bahwa handler dapat berhasil menangani situasi di mana konten file berubah saat handler membaca file.

    Untuk definisi bendera, lihat GETPROPERTYSTOREFLAGS.

Memahami Handler Properti

Menggunakan Nama Jenis

Menggunakan Daftar Properti

Menginisialisasi Handler Properti

Praktik Dan FAQ Terbaik Handler Properti