Tengo un dll ActiveX de VB6 que depende de ComDlg32.ocx. Esta dll ActiveX se llama desde una aplicación .NET. ActiveX dll tiene una interfaz pública que tiene 1 método, que abre un formulario, que abre un cuadro de diálogo Abrir archivo (de ComDlg32.ocx). La aplicación .NET tiene un botón que llamará a este método ActiveX dll.
Todo esto funciona cuando ComDlg32.ocx y ActiveX dll están registrados (a través de regsvr32), pero necesito que esto funcione usando RegFree COM, al menos para las dependencias de ActiveX dll. He creado un archivo de manifiesto para este ActiveX dll, pero parece que no se lee. ProcMon no tenía ninguna referencia al archivo de manifiesto y sxstrace no me dio información (literalmente, un archivo de texto en blanco cuando analicé el archivo etl).
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyIdentity name="DeployArchitectureTest" version="1.0.0.0" type="win32" processorArchitecture="x86"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> <file name="COMDLG32.OCX"> <typelib tlbid="{F9043C88-F6F2-101A-A3C9-08002B2F49FB}" version="1.2" flags="control,hasdiskimage" helpdir="" /> <comClass clsid="{F9043C85-F6F2-101A-A3C9-08002B2F49FB}" tlbid="{F9043C88-F6F2-101A-A3C9-08002B2F49FB}" progid="MSComDlg.CommonDialog.1" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,onlyiconic,cantlinkinside,insideout,activatewhenvisible,invisibleatruntime,setclientsitefirst"> <progid>MSComDlg.CommonDialog</progid> </comClass> </file> </assembly>Probé un manifiesto externo para el dll y también incrusté el manifiesto, pero aún no tuve suerte. Debo estar perdiendo algo, pero toda la información que puedo encontrar habla sobre cómo crear un archivo de manifiesto para un exe, pero no hay información sobre cómo manejar un DLL de ActiveX que tiene sus propias dependencias.
Si alguien tiene alguna información, se lo agradecería mucho.
Después de investigar un poco más y de que @SimonMourier y @HansPassant me indicaran la dirección correcta, logré que esto funcionara.
Pensé que habría sido posible un manifiesto dll si estuviera usando el ID de recurso n. ° 2 como mencionó @HansPassant, pero no pude hacer que funcionara de esa manera. No importa lo que hice, el manifiesto dll nunca pareció leerse.
Sin embargo, descubrí que incluir todos los datos del manifiesto de lo que era el manifiesto dll en el manifiesto exe y asegurarme de que el exe no tuviera un manifiesto incrustado permitía que RegFree COM funcionara como se esperaba. Descubrí que Visual Studio estaba creando mi .NET exe con un manifiesto incrustado, aunque había un archivo app.manifest como parte del proyecto. Tuve que configurar el COM dll como 'aislado = verdadero' para que el manifiesto se construyera como externo.
Así que gracias a @SimonMourier y @HansPassant, sus comentarios me guiaron por el camino correcto para resolverlo.