Pregunta

He creado los manifiestos necesarios para que mi DLL del servidor COM y una aplicación cliente funcionen sin registro en Windows XP. He probado todo tipo de combinaciones (con y sin registro) y, en todos los casos, la aplicación cliente ve la versión en paralelo de la biblioteca si los manifiestos están presentes, y la que está registrada, si no, (o un error COM Si no hay registro en absoluto). Lo probé en mi máquina de desarrollo de Windows XP y le di los archivos (DLL, EXE del cliente y un manifiesto para cada uno) a compañeros de trabajo, que también han ejecutado todo con éxito en sus propias máquinas con Windows XP. Los manifiestos son archivos XML externos, no recursos integrados. Hasta ahora tan bueno.

Sin embargo, cuando copio los archivos a una máquina con Windows Server 2003, no funciona. Recibo una falla silenciosa, pero un error de aplicación en el Registro de eventos de la aplicación (ver más abajo). Si anulo el registro de la DLL y elimino los manifiestos, aparece un error similar (silencioso en el símbolo del sistema, pero un error de aplicación en el registro de eventos). Obviamente hay algún problema para encontrar el registro. He reproducido esto en todas las máquinas con Windows Server 2003 a las que puedo acceder en nuestra empresa. De acuerdo con la documentación de Microsoft sobre COM lado a lado / sin registro, se supone que funciona en Windows XP y versiones posteriores, y en Windows Server 2003 y versiones posteriores.

Para ser claros, el mismo cliente se ejecuta perfectamente en esas mismas máquinas con Windows Server 2003 contra una versión de registrado ( es decir, usando regsvr32) de la misma COM DLL, bajo las mismas credenciales de inicio de sesión que estoy tratando de usar para COM sin registro. En otras palabras, no hay problemas intrínsecos disfrazados de problemas COM sin registro: este cliente y servidor funcionan bien cuando el servidor está registrado globalmente en el registro.

¿Alguien tiene alguna idea de cómo investigar más? No soy un experto en Windows Server, pero ¿hay quizás alguna configuración de política que deba modificarse para habilitar este soporte? Si puedo localizar el cambio necesario, nuestro personal de soporte técnico / infraestructura probablemente no tendrá que hacerlo, pero no puedo confiar en ellos para investigar el problema también, ya que están inundados.

En caso de que importe (no creo que deba, pero nunca se sabe), la DLL está escrita en Delphi 2007, mientras que el cliente está escrito en Visual C ++.

Event Type: Information
Event Source:   Application Error
Event Category: (100)
Event ID:   1004
Date:       5/2/2009
Time:       8:07:45 AM
User:       N/A
Computer:   ***server name****
Description:
Reporting queued error: faulting application ***program name***.exe, version 0.0.0.0, faulting module ***program name***.exe, version 0.0.0.0, fault address 0x0002ac9e.

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
¿Fue útil?

Solución

Una cosa a tener en cuenta es si el exe tiene un manifiesto interno. En XP, el orden de búsqueda de manifiesto exe es externo y luego interno. En Server 2003 y versiones posteriores, el orden es interno y luego externo.

Otros consejos

Con un servidor COM creado en Delphi 7, he visto problemas similares si el servidor COM no estaba registrado y la aplicación del cliente se iniciaba con una cuenta de usuario restringida, porque la implementación COM de Delphi siempre intentaba actualizar la información de registro, incluso cuando la DLL La función RegisterServer no fue llamada explícitamente.

Para ver si esto es un problema, intente ejecutar la aplicación cliente en una cuenta con privilegios administrativos sin restricciones.

MSDN menciona que, en Windows 2003, los problemas con los servidores COM libres de registro deben detallarse en una sección específica del registro de eventos del sistema:

  

Al solucionar problemas sin registro   Problemas de COM, el Visor de eventos en   Windows Server 2003 es tu amigo.   Cuando Windows XP o Windows Server 2003   detecta un error de configuración que lo hará   normalmente muestra un cuadro de mensaje de error   Titulado para la aplicación que tienes   lanzado y que contiene el mensaje   " Esta aplicación no ha podido iniciarse   porque la configuración de la aplicación   Es incorrecto. Reinstalando el   La aplicación puede solucionar este problema. " yo   Aconsejamos que cada vez que veas esto.   mensaje que reproduce el problema en   Windows Server 2003, consulte el   Sistema de registro de eventos y buscar eventos   de la fuente SideBySide. La razón   No sugiero que mires al   Registro de eventos de Windows XP en estos casos es   que contendrá invariablemente una   mensaje como " Generar activación   El contexto falló para [ruta] [aplicación   nombre de archivo] .Manifest. Error de referencia   mensaje: la operación ha finalizado   con éxito, " que no ayuda   Identifica el problema.    http://msdn.microsoft.com/en-us/library/ ms973913.aspx # rfacomwalk_topic6

Además, si es posible, díganos los nombres de los archivos y el contenido de los archivos de manifiesto que utiliza.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top