2010-02-17 26 views
11

Quiero crear una pequeña aplicación para agregar y eliminar entradas del menú contextual definidas por el usuario desde el registro. Para hacer esto, de alguna manera tengo que obtener el CLSID de una DLL arbitraria para que pueda hacer una copia de seguridad de las entradas anteriores, si existen antes de escribir nuevas.Obteniendo CLSID para un archivo DLL?

Aunque de alguna manera regsrv32 se las arregla para crear este número mágico, no encontré ninguna manera de obtener ese número yo mismo.

espero que haya algo mejor que esto:

  1. registro de exploración para el nombre del archivo DLL
  2. si no lo encuentra, registrarlo, vuelva a escanear, y luego anular el registro de nuevo

Si el DLL ha sido renombrado, puedo ver una posibilidad de problemas.

Respuesta

4

Podría considerar llamar al LoadTypeLibEx en la DLL que especifica REGKIND_NONE y luego examinar obtener la información TypeLibInfo disponible a través de la interfaz ITypeLib que le fue devuelta.

Hay información sobre este tipo de cosas en MSDN. Es un viejo enlace centrado en VB6, pero tiene información útil sobre la inspección de componentes COM de esta manera.

2

Usted podría tratar de usar RegOverridePredefKey() para interceptar lo que hace regsvr32 al registro - llamar RegOverridePredefKey(), y luego reproducir lo que hace regsvr32 - LoadLibrary() el servidor COM, llamar a DllRegisterServer() - entonces inspeccionar los cambios realizados. Con RegOverridePredefKey() aislará los cambios y no los dejará ser persistentes.