Bagikan melalui


Pendaftaran Mandiri

Karena perangkat lunak komponen terus tumbuh sebagai pasar, akan ada semakin banyak instans di mana pengguna mendapatkan komponen perangkat lunak baru sebagai modul DLL atau EXE tunggal, seperti saat mengunduh komponen baru dari layanan on-line atau menerimanya dari teman di disket. Dalam kasus ini, tidak praktis untuk mengharuskan pengguna melalui prosedur penginstalan yang panjang atau program penyiapan. Selain masalah lisensi, yang ditangani melalui IClassFactory2, prosedur penginstalan biasanya membuat entri registri yang diperlukan agar komponen berjalan dengan benar dalam konteks COM dan OLE.

Pendaftaran mandiri adalah cara standar di mana modul server dapat mengemas operasi registrinya sendiri, baik pendaftaran maupun unregistrasi, ke dalam modul itu sendiri. Ketika digunakan dengan lisensi yang ditangani melalui IClassFactory2, server dapat menjadi modul yang sepenuhnya mandiri tanpa perlu program penginstalan eksternal atau file .reg.

Setiap modul pendaftaran mandiri, DLL atau EXE, harus terlebih dahulu menyertakan string "OleSelfRegister" di bagian StringFileInfo dari sumber daya informasi versinya, seperti yang ditunjukkan di sini.

VS_VERSION_INFO VERSIONINFO 
 
 ... 
 
 BEGIN 
   BLOCK "StringFileInfo" 
    BEGIN 
#ifdef UNICODE 
     BLOCK "040904B0" // Lang=US English, CharSet=Unicode 
#else 
     BLOCK "040904E4" // Lang=US English, CharSet=Windows Multilingual 
#endif 
      BEGIN 
       ... 
       VALUE "OLESelfRegister", "\0" 
      END 
 
   ... 
 
   END 
 
 ... 
 
 END 
 

Keberadaan data ini memungkinkan pihak yang tertarik, seperti aplikasi yang ingin mengintegrasikan komponen baru ini, untuk menentukan apakah server mendukung pendaftaran mandiri tanpa harus memuat DLL atau EXE terlebih dahulu.

Jika server dimas dalam modul DLL, DLL harus mengekspor fungsi DllRegisterServer dan DllUnregisterServer. Aplikasi apa pun yang ingin menginstruksikan server untuk mendaftarkan dirinya sendiri (yaitu, semua CLSID dan ID pustaka jenisnya) dapat memperoleh pointer ke DllRegisterServer melalui fungsi GetProcAddress . Dalam DllRegisterServer, DLL membuat semua entri registri yang diperlukan, menyimpan jalur yang benar ke DLL untuk semua entri InprocServer32 atau InprocHandler32 .

Ketika aplikasi ingin menghapus komponen dari sistem, aplikasi harus membatalkan pendaftaran komponen tersebut dengan memanggil DllUnregisterServer. Dalam panggilan ini, server menghapus persis entri yang sebelumnya dibuat di DllRegisterServer. Server tidak boleh menghapus semua entri secara membabi buta untuk kelasnya karena perangkat lunak lain mungkin telah menyimpan entri tambahan, seperti kunci TreatAs .

Jika server dikemas dalam modul EXE, aplikasi yang ingin mendaftarkan server meluncurkan server EXE dengan argumen baris perintah /RegServer atau -RegServer (tidak peka huruf besar/kecil). Jika aplikasi ingin membatalkan pendaftaran server, aplikasi meluncurkan EXE dengan argumen baris perintah /UnregServer atau -UnregServer. EXE yang mendaftar sendiri mendeteksi argumen baris perintah ini dan memanggil operasi yang sama dengan DLL dalam DllRegisterServerdan DllUnregisterServer, masing-masing, mendaftarkan jalur modulnya di bawah LocalServer32 alih-alih InprocServer32 atau InprocHandler32.

Server harus mendaftarkan jalur lengkap ke lokasi penginstalan modul DLL atau EXE untuk kunci InprocServer32, InprocHandler32, dan LocalServer32 masing-masing dalam registri. Jalur modul mudah diperoleh melalui fungsi GetModuleFileName.

Menginstal sebagai Aplikasi Layanan

Mendaftarkan Kelas di Penginstalan

Mendaftarkan Server EXE yang Sedang Berjalan

Mendaftarkan Objek di ROT