Ho una situazione in cui una DLL gestita chiama alcune DLL non gestite. Conosco il CLSID della DLL non gestita, esiste un modo per scoprire quale file binario ospita tale CLSID?Come trovare una DLL data un CLSID?
risposta
Normalmente, si può solo andare a:
HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ CLSID \ "GUID"
E trovare una chiave denominata "InProcServer32" per esempio, e non ci sarà il valore di default che ha la DLL. Questo è un modo semplice per farlo.
Vale la pena notare che, a seconda di come è stato installato, è possibile trovarlo in HKEY_CURRENT_USER \ SOFTWARE \ Classes \ CLSID. – user1454265
Ciò significa che 'HKEY_CLASSES_ROOT \ CLSID' è quello che dovrebbe essere usato. – IllidanS4
Non puoi semplicemente cercarlo nel registro usando regedit e cercare il percorso binario.
Sulla base BobbyShaftoe risposta possiamo costruire un semplice script VBS che legge quel registro per noi:
Dll_RegPath = "HKEY_CLASSES_ROOT\CLSID\<GUID>\InProcServer32\"
Incollare il seguente a "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
È inoltre possibile trovare ProgId da:
ProgID_RegPath = "HKEY_CLASSES_ROOT\CLSID\<GUID>\ProgID\"
Stai provando a farlo in modo programmatico o ad hoc? Ad esempio, hai bisogno di un programma per farlo da solo, o è qualcosa che a volte hai bisogno di fare come sviluppatore? –