Bir DLL dosyasının kayıtlı olup olmadığını nasıl bilebilirim?


28

Bir DLL dosyasını eski makinelere (Windows XP) kaydederken, regsrv her zaman kaydın başarılı olduğunu söyler. Bu, kullanıcının kayıt olma iznine sahip olmasa bile olur.

Dll adı ile bir DLL'in yüklü olup olmadığını doğrulamak için komut satırında çalıştırabileceğim bir komut var mı?

Yanıtlar:


22

Bu bağlantıyı buldum: Bir DLL dosyasının kayıtlı olup olmadığını nasıl anlarım? :

DLL kaydının isteğe bağlı işlemleri kapsayabileceği göz önüne alındığında, kaydın rastgele bir DLL için gerçekleştirilip gerçekleştirilmediğini belirlemenin genel amaçlı bir yolu yoktur.

Bir DLL dosyasının kayıtlı olup olmadığını belirlemek için, etki alanına özgü bilgileri getirmeniz gerekir. Bir DLL'nin belirli bir CLSID'ye sahip bir COM nesnesini kaydettiğini biliyorsanız, CLSID'nin gerçekten kayıtlı olup olmadığını kontrol edebilirsiniz.

Tamam, imkansız, ama DLL genellikle kendilerini kayıt defterinde bir giriş oluşturarak kaydeder. Bir geçici çözüm şudur:

  1. İlk önce DLL'in COM GUID'ini keşfetmelisiniz. Zaten kayıtlı olduğu bir makineniz varsa, şunları yapabilirsiniz:
    1. Regedit'i açın ve DLL dosya adınızı arayın
    2. Kayıtlıysa, dosya adını TypeLib altındaki bir anahtarın altında bulabilirsiniz. Anahtar şöyle görünecek: {9F3DBFEE-FD77-4774-868B-65F75E7DB7C2}
  2. Artık DLL GUID'sini bildiğinize göre, bu komutla DOS komut isteminde arayabilirsiniz: reg query HKCR\CLSID | find /i "{9F3DBFEE-FD77-4774-868B-65F75E7DB7C3}"

Daha iyi bir cevap GUID'i dosyadan önce doğrudan dosyadan bulmama izin verir. En azından bu şekilde, başarıyla yüklenip yüklenmediğini doğrulamak için bir komut dosyası oluşturabilirsiniz.


4
Önceden GUID'i bilmeniz gerekmez. Daha basit bir yaklaşım Kayıt Defteri'nde DLL dosya adı aramak olacaktır : bu ad bu GUID anahtarlarından herhangi birinin altında listeleniyorsa, evet, DLL gerçekten kaydedilmiştir.
Massimo

@Massimo: ama nasıl arayacağım? Hangi anahtarda? Bu yanlış (örneğin, bir yönetici olmadan kayıt çalıştı) kabuk tarihinin görüntüleyebilir
neves

HKCR altında, açıkçası :) Veya en azından HKLM altında. Kullanıcıya özgü şeyler (kabuk geçmişi gibi) HKCU altındadır.
Massimo

@Massimo: Buraya aramak için shell komutunu içeren bir cevap koyarsanız, doğru cevap olarak işaretlerim.
neves

Sizinkiyle aynı: REG QUERYDLL dosya adını aramak için kullanın .
Massimo

13

Belirli bir adda bir DLL dosyasının kayıtlı olup olmadığını kontrol etmem gerekiyordu ve bu komutu BAT'ımda kullandım:

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

Errorlevel ile reg queryhiçbir şey bulamadığında etikete kontrol gönderdi . Kayıt defterinin aradığınız bölümünü değiştirmeniz gerekebilir (benim durumumda HKLM'...ne kadar belirgin olursa o kadar hızlı, aksi takdirde gerçekten uzun sürer).

Gerekirse çıktı işlenebilir, girdi için GUID elde edilebilir, ancak bu reg query komutunun kapsamı dışındadır.


0

Komut satırından bir DLL dosyasının kayıt defteri girdilerini (ve isteğe bağlı olarak COM nesnelerini) bulmak için , @ virgo47 ve @ neves tarafından verilen yanıtların bir kombinasyonu benim için en iyi sonucu verdi.

  1. DLL adını içeren kayıt defteri girdilerini bulun. Bu girişler genellikle GUID'leri anahtarları olarak kullanır.

    reg sorgu HKLM \ YAZILIM \ Sınıflar / s / f whatever.dll

  2. (isteğe bağlı) Bu GUID'ler için kaydedilmiş COM nesnelerini bulun. (Kullanımı /s /f "{GUID}"daha hızlı olmalıdır | findstr /i "{GUID}". Ve | find /i "{GUID}"bir yazım hatası gibi görünüyor (ancak henüz Serverfault hakkında yorum yazamıyorum)

    "HKCR \ CLSID / s / f" için sorgu sorgu "{9F3DBFEE-FD77-4774-868B-65F75E7DB7C3}"

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.