web-dev-qa-db-ja.com

DLLが登録されているかどうかはどうすればわかりますか?

古いマシン(Windows XP)でDLL)を登録する場合、regsrvは常に登録が成功したと表示します。これは、ユーザーに登録する権限がない場合でも発生します。

DLLの名前を使用して、DLLがインストールされているかどうかを確認するためにコマンドラインで実行できるコマンドはありますか?

30
neves

私はこのリンクを見つけました: DLLが登録されているかどうかを確認するにはどうすればよいですか?

DLL登録には任意の操作が含まれる可能性があるため、登録が任意のDLLに対して行われたかどうかを判別する汎用的な方法はありません。

DLLが登録されているかどうかを判断するには、ドメイン固有の知識を取り込む必要があります。DLLが特定のCLSID、そのCLSIDが実際に登録されているかどうかを確認できます。

OK、それは不可能ですが、DLLは通常、自身を登録し、レジスターにエントリーを作成します。回避策は次のとおりです。

  1. まず、DLLのCOM GUID=を検出する必要があります。すでに登録されているマシンが1台ある場合は、次のことができます。
    1. Regeditを開き、DLLファイル名を検索します
    2. 登録されている場合、TypeLibの下にあるキーの下にファイル名があります。キーは次のようになります:{9F3DBFEE-FD77-4774-868B-65F75E7DB7C2}
  2. DLL GUIDがわかったので、DOSプロンプトで次のコマンドを使用してそれを検索できます:reg query HKCR\CLSID | find /i "{9F3DBFEE-FD77-4774-868B-65F75E7DB7C3}"

より良い答えは、GUIDが登録される前にファイルから直接見つけることを可能にします。少なくともこの方法で、インストールするスクリプトを作成し、それが正常にインストールされたかどうかを確認できます。

24
neves

特定の名前のDLLが登録されているかどうかを確認する必要があり、BATでこのコマンドを使用しました。

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

エラーレベルがある場合は、いつでもreg query何も見つかりませんでした。検索するレジストリの部分を変更する必要がある場合があります(私の場合はHKLM'...、より具体的なパスの方が高速です。それ以外の場合は本当に時間がかかります)。

必要に応じて出力を処理できます。エントリのGUIDを取得できますが、これはreg queryコマンドの範囲外です。

16
virgo47

DLL コマンドラインから)のレジストリエントリ(およびオプションでCOMオブジェクト)を見つけるには、@ virgo47と@nevesの回答の組み合わせが最適でした。

  1. DLLという名前を含むレジストリエントリを見つけます。これらのエントリは通常、キーとしてGUIDを使用します。

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

  2. (オプション)これらのGUIDに登録されているCOMオブジェクトを検索します。 (/s /f "{GUID}"を使用すると| findstr /i "{GUID}"よりも高速になります。そして| find /i "{GUID}"はタイプミスのようです(しかし、まだServerfaultにコメントを書き込むことはできません)。)

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

0
Orafu