web-dev-qa-db-ja.com

CLSIDを指定してDLLを見つける方法は?

マネージDLLがアンマネージDLLを呼び出す状況があります。アンマネージDLLのCLSIDを知っています。そのCLSIDを格納しているバイナリファイルを見つける方法はありますか?

29
dudemonkey

通常、次の場所に移動できます。

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\"GUID"

そして、例えば「InProcServer32」と呼ばれるキーを見つけると、DLLを持つデフォルト値が存在します。これは、そのための1つの簡単な方法です。

36
BobbyShaftoe

Regeditを使用してレジストリでそれを検索し、バイナリパスを探すことはできませんか?.

7
Simon

BobbyShaftoeの返信に基づいて、そのレジストリーを読み取る単純なvbsスクリプトを作成できます。

Dll_RegPath = "HKEY_CLASSES_ROOT\CLSID\<GUID>\InProcServer32\"

以下を「test.vbs」に貼り付けます

Sub Main

    ' used to find location of "System.Collections.ArrayList" progid dll
    Const csGUID = "{6896B49D-7AFB-34DC-934E-5ADD38EEEE39}"

    MsgBox srGetDllPathByGUID(csGUID)

End Sub

Function srGetDllPathByGUID( sGUID )
    Const csRegPath = "HKEY_CLASSES_ROOT\CLSID\<GUID>\InProcServer32\"

    Dim oShell: Set oShell = CreateObject("WScript.Shell")
    Dim sReg: sReg = Replace( csRegPath, "<GUID>", sGUID ) ' build str

    srGetDllPathByGUID = oShell.RegRead(sReg)

    Set oShell = Nothing ' clean up
End Function

Call Main

次の方法でもProgIdを見つけることができます。

ProgID_RegPath = "HKEY_CLASSES_ROOT\CLSID\<GUID>\ProgID\"
3
n3rd4i