COM sin registro no funciona en Windows Server 2003
-
05-07-2019 - |
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.
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.