Bagaimana saya tahu jika DLL terdaftar?

28

Saat Anda mendaftarkan DLL di komputer lama (Windows XP), regsrv selalu mengatakan bahwa pendaftarannya berhasil. Ini terjadi bahkan jika pengguna tidak memiliki izin untuk mendaftar.

Dengan nama dll, apakah ada perintah yang bisa saya jalankan di baris perintah untuk memverifikasi apakah DLL diinstal?

neves
sumber

Jawaban:

22

Saya menemukan tautan ini: Bagaimana saya bisa tahu apakah DLL telah terdaftar? :

Mengingat bahwa pendaftaran DLL dapat mencakup operasi sewenang-wenang, tidak ada cara tujuan umum untuk menentukan apakah pendaftaran telah terjadi untuk DLL sewenang-wenang.

Untuk menentukan apakah DLL telah terdaftar, Anda harus memasukkan pengetahuan khusus domain. Jika Anda tahu bahwa DLL mendaftarkan objek COM dengan CLSID tertentu, Anda dapat memeriksa apakah CLSID memang terdaftar.

OK, itu tidak mungkin, tetapi DLL biasanya mendaftar sendiri membuat entri dalam register. Solusi adalah untuk:

  1. Pertama, Anda harus menemukan COM GUID dari DLL. Jika Anda memiliki satu mesin yang sudah terdaftar, Anda dapat:
    1. Buka regedit dan cari nama file DLL Anda
    2. Jika terdaftar, Anda akan menemukan nama file di bawah kunci yang berada di bawah TypeLib. Kuncinya akan terlihat seperti: {9F3DBFEE-FD77-4774-868B-65F75E7DB7C2}
  2. Sekarang setelah Anda mengetahui DLL GUID, Anda bisa mencarinya dengan perintah ini di DOS prompt: reg query HKCR\CLSID | find /i "{9F3DBFEE-FD77-4774-868B-65F75E7DB7C3}"

Jawaban yang lebih baik akan memungkinkan saya untuk menemukan GUID langsung dari file sebelum didaftarkan. Setidaknya dengan cara ini Anda dapat membuat skrip untuk menginstal dan memverifikasi jika berhasil diinstal.

neves
sumber
4
Anda sebenarnya tidak perlu mengetahui GUID sebelumnya. Pendekatan yang lebih sederhana adalah mencari Registry untuk nama file DLL : jika nama itu terdaftar di bawah salah satu kunci GUID itu, maka ya, DLL memang telah terdaftar.
Massimo
@ Massimo: tapi bagaimana saya mencarinya? Di kunci mana? Ini bisa keliru ditampilkan dalam riwayat shell (misalnya, mencoba mendaftar tanpa menjadi admin)
neves
Di bawah HKCR, jelas :) Atau setidaknya di bawah HKLM. Hal-hal khusus pengguna (seperti riwayat shell) berada di bawah HKCU.
Massimo
@ Massimo: jika Anda meletakkan jawaban di sini dengan perintah shell untuk mencarinya, saya akan menandainya sebagai jawaban yang benar.
neves
Ini sama dengan milik Anda: gunakan REG QUERYuntuk mencari nama file DLL.
Massimo
13

Saya perlu memeriksa apakah DLL dengan nama tertentu terdaftar dan saya menggunakan perintah ini di BAT saya:

reg query HKLM\SOFTWARE\Classes /s /f whatever.dll
if errorlevel 1 goto DLL_MISSING

Jika dengan kontrol tingkat kesalahan dikirim ke label kapan reg querypun tidak menemukan apa pun. Anda mungkin perlu mengubah bagian registri tempat Anda mencari (dalam kasus saya HKLM'..., jalur yang lebih spesifik semakin cepat, jika tidak, akan sangat lama).

Output dapat diproses jika perlu, GUID untuk entri dapat diperoleh, tapi itu di luar ruang lingkup perintah reg query.

virgo47
sumber
0

Untuk menemukan entri registri (dan objek COM opsional) untuk DLL dari baris perintah , kombinasi jawaban oleh @ virgo47 dan @neves bekerja paling baik untuk saya.

  1. Temukan entri registri yang berisi nama DLL. Entri ini biasanya menggunakan GUID sebagai kuncinya.

    reg permintaan HKLM \ SOFTWARE \ Classes / s / f whatever.dll

  2. (opsional) Temukan objek COM yang telah terdaftar untuk GUID ini. (Menggunakan/s /f "{GUID}" harus lebih cepat daripada | findstr /i "{GUID}". Dan | find /i "{GUID}"tampaknya salah ketik (tapi saya belum bisa menulis komentar di Serverfault).)

    reg permintaan HKCR \ CLSID / s / f "{9F3DBFEE-FD77-4774-868B-65F75E7DB7C3}"

Orafu
sumber