2010-05-05 11 views
5

Antecedentes:Recuperar COM identificador de programa del exe sin registrarlo

me gustaría extraer los datos de una aplicación COM VB6 para que pueda registrarlo correctamente (de acuerdo con las mejores prácticas Microsoft) la aplicación. Estoy usando WiX 3.0 y heat.exe no extraerá los datos (problema conocido con calor) y no tengo acceso inmediato al archivo TLB asociado. La aplicación VB6 no tiene compatibilidad activada, por lo que regenera los GUIDES COM en cada compilación (Quieren que la aplicación pueda ejecutarse al lado de una versión anterior).

Creé una aplicación C# que recopilará el Escriba la información deLib, interfaz y CoClass desde la aplicación VB6 sin registrarlo y cree un archivo wxs para que use candle. Mi compañía tiene varias otras aplicaciones más antiguas como esta y me gustaría que sea una solución más genérica.

los temas:

1.Is Hay una manera de recoger el 'verdadero' identificador de programa (programador pretende uno) de la aplicación con el proyecto o archivo de TLB y sin registrarlo?

2. ¿Hay alguna manera de averiguar el Threading Model deseado desde una DLL sin registrarlo? (Tengo la intención de que pueda manejar todos los elementos activos COM, también podría estar completo) Gracias.

+0

El Visor de objetos OLE-COM que se incluye con Visual Studio puede hacerlo, por lo que definitivamente es posible. ¡Buena pregunta! + 1 – ParmesanCodice

+1

Esto generalmente se hace configurando la redirección del registro e invocando el autorregistro. El componente COM no se registra y no sé si esto satisface parte de la pregunta "sin registrarlo". Estoy usando una versión ajustada de sebo: http://www.unicontsoft.com/upload/tallow/ – wqw

+0

Mi intención era ver si no había nada sin hacer llamadas al registro. Voy a leer sobre la redirección Gracias. – mangelo

Respuesta

1

Sí y no.

Hasta donde yo sé, no hay una manera genérica de obtener ProgIDs de un typelib o servidor COM.

El punto de entrada para las DLL es DllRegisterServer que se supone que debe escribir información de registro en el registro, y para los servidores EXE generalmente tienen un argumento de línea de comandos que tiene la misma implicación.

Las bibliotecas de tipos contienen una descripción de todas las interfaces y coclasses en el componente, pero rara vez contienen el ProgID humano legible.

La única manera clara que puedo ver y recomendar es anular la clave HKCR \ CLSID para apuntar a algún lugar temporalmente, y luego llamar al DllRegisterServer. Como las anulaciones de clave de registro son locales de proceso, esto solo funcionará para servidores en proceso (DLL).

Consulte http://msdn.microsoft.com/en-us/library/ms724901(v=VS.85).aspx para obtener información sobre la anulación de claves de registro.

Luego inspeccione el registro de cero y vea qué cambios se realizaron, p. CLSID < -> Correlaciones de ProgID, modelo de subprocesamiento, etc.

+0

Voy a buscar en esto. Como ahora estoy enfocado en un proyecto diferente, pueden pasar de unos pocos días a una semana. – mangelo

+0

Me pregunto si tal vez te he extraviado ... Ver más cerca 'RegOverridePredefKey' solo reemplaza el proceso actual (por razones obvias), por lo que no puedes usarlo para recopilar datos de registro de un archivo ejecutable. Estoy editando mi respuesta para reflejar esto. –

Cuestiones relacionadas