Recupere COM ProgID de exe sin registrarlo

Fondo:

Me gustaría extraer los datos COM de una aplicación VB6 para poder registrarlos correctamente (según las mejores prácticas de Microsoft) de la aplicación. Estoy usando WiX 3.0 y heat.exe no extraerá los datos (problema conocido con heat) y no tengo acceso listo al archivo TLB asociado. La aplicación VB6 no tiene la compatibilidad activada, por lo que regenera los GUID COM de cada comstackción (desean que la aplicación pueda ejecutarse en paralelo con una versión anterior).

Creé una aplicación C # que recostackrá la información de TypeLib, interfaz y CoClass de la aplicación VB6 sin registrarla y crearé un archivo wxs para que Candle lo use. Mi empresa tiene otras aplicaciones antiguas como esta y me gustaría convertirla en una solución más genérica.

Los problemas:

1. ¿Hay una manera de recostackr el ProgID ‘verdadero’ (destinado al progtwigdor) de la aplicación sin el proyecto o el archivo TLB y sin registrarlo?

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

Si y no.

Que yo sepa, no hay una forma genérica de obtener ProgIDs de una biblioteca de caracteres o un servidor COM.

El punto de entrada para las DLL es DllRegisterServer que se supone que escribe la 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 coclases en el componente, pero rara vez contienen el ProgID legible.

La única forma clara que puedo ver y recomendar es anular la clave HKCR \ CLSID para apuntar a algún lugar temporalmente y luego llamar a DllRegisterServer . Como las anulaciones de claves de registro son de proceso local, 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 inicial y vea qué cambios se realizaron, por ejemplo, CLSID <-> asignaciones de ProgID, modelo de subprocesos, etc.