Рекомендуемые параметры заголовка PE для приложения Delphi 7, работающего на сервере терминалов?
При исследовании ошибок внешнего исключения C0000006, о которых сообщают некоторые пользователи, работающие с приложением Delphi 7 на терминальном сервере Windows 2008, я уже нашел несколько вопросов по этому и связанным с этим вопросам. Мне интересно, есть ли у кого-то окончательный список этих параметров, который бы соответствовал стандартным приложениям базы данных Delphi 7, работающим на сервере терминалов.
Вопросы, которые я рассмотрел, включают:
Пока я не читаю эти данные, я думаю, что добавить в файл .dpr следующее:
const
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = $8000;
// Following are already defined in D7 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}
Изменить: Удаление раздела переноса необязательно, поэтому здесь пересмотренная версия:
const
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = $8000;
// Following are already defined in D7 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}
Ответы
Ответ 1
{$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}
подходит для ваших нужд. Я подозреваю, что IMAGE_FILE_NET_RUN_FROM_SWAP - это то, что вам нужно иметь дело с C0000006. Эта ошибка обычно возникает при запуске с сетевого диска, и диск не может удовлетворить страницу в запросе исполняемого файла.
Другие флаги PE отлично подходят для вас в любом случае. Я бы сделал это так, как вы.
Что касается права IMAGE_DLLCHARACTERISTICS_TERMINAL_ SERVER_AWARE, то только вы знаете. Применяется ли приложение для приложений, которые будут считаться не устаревшим приложением для служб терминалов, а задокументировано в MSDN? Если это так, используйте IMAGE_DLLCHARACTERISTICS_TERMINAL_ SERVER_AWARE.