¿Configuraciones de encabezado de PE recomendadas para la aplicación Delphi 7 que se ejecuta en el servidor de terminal?
delphi-7 terminal-services (1)
Al investigar los errores de la excepción externa C0000006 informados por algunos usuarios que ejecutan una aplicación Delphi 7 en un servidor de terminal de Windows 2008, encontré varias preguntas sobre este y otros problemas relacionados. Me pregunto si alguien tiene una lista definitiva de estas configuraciones que sería apropiada para una aplicación de base de datos Delphi 7 estándar que se ejecuta en un servidor de terminal.
Las preguntas que he mirado incluyen:
- Excepción externa C0000006
- Delphi - errores de formato de flujo no válido en la ejecución
- ¿Hay riesgos asociados con IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP o IMAGE_FILE_NET_RUN_FROM_SWAP?
- Delphi TOpenDialog se bloquea en Windows 2008 cuando se ejecuta como aplicación de escritorio remoto
- Delphi 2007: ¿Cómo configurar TSAWARE?
- ¿Cómo puedo obligar a Delphi 7 a cargar todo el ejecutable?
Tan lejos de leer esto, estoy pensando que debería agregar lo siguiente al archivo .dpr:
const
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = $8000;
// Following are already defined in D7''s Windows.pas
IMAGE_FILE_RELOCS_STRIPPED = $0001;
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = $0400;
IMAGE_FILE_NET_RUN_FROM_SWAP = $0800;
{$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}
{$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED
or IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
or IMAGE_FILE_NET_RUN_FROM_SWAP}
Edición: eliminar la sección de reubicación es probablemente innecesario, así que aquí está la versión revisada:
const
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = $8000;
// Following are already defined in D7''s Windows.pas
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = $0400;
IMAGE_FILE_NET_RUN_FROM_SWAP = $0800;
{$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}
{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
or IMAGE_FILE_NET_RUN_FROM_SWAP}
{$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_TERMINAL_ SERVER_AWARE}
{$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED
or IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
or IMAGE_FILE_NET_RUN_FROM_SWAP}
está bien para sus necesidades. Sospecho que IMAGE_FILE_NET_RUN_FROM_SWAP es lo que necesita para lidiar con C0000006. Ese error suele ocurrir cuando se ejecuta desde una unidad de red y la unidad no puede satisfacer una página en la solicitud del ejecutable.
Las otras banderas de PE están bien para ti de cualquier manera. Lo tendría como tú.
En cuanto a si IMAGE_DLLCHARACTERISTICS_TERMINAL_ SERVER_AWARE tiene razón, solo tú lo sabes. ¿Su aplicación cumple con los requisitos para ser considerada una aplicación no legada para servicios de terminal, como se documenta en MSDN ? Si es así, use IMAGE_DLLCHARACTERISTICS_TERMINAL_ SERVER_AWARE.