Delphi - неверные ошибки формата потока при запуске

Delphi 6 Prof.

У нас много приложений. Программы имеют размер 8-12 МБ.

В этот период мы неоднократно получали сообщения об ошибках "Недопустимый формат потока".

Мы используем общие папки Windows (или Linux) для хранения приложений и пользователей, запускающих их из этих каталогов со ссылками. Это означает, что ОС подкачки файлов и загрузки только необходимых частей.

Раньше у нас были исключения C000006. Как я знаю, это означает, что пейджинг (загрузка) файла не удался при любой сетевой проблеме (тайм-аут и т.д.).

Теперь мы сталкиваемся с ошибками "Недопустимый формат потока" и ошибками "недопустимые свойства xxxx".

Если я хорошо знаю, обе ошибки вызваны "проблемой подкачки", но C06 происходит в коде и потоковой ошибкой в ​​области данных Exe. Но, может быть, я знаю неправильно...

В любом случае проблема странная. Иногда мы это получали, иногда мы не можем.

Как этого избежать? Эти ошибки не позволяют пользователям создавать новые диалоги, использовать программы...

(В другом месте пользователь использовал wifi - тогда мы получили одинаковые побочные эффекты.)

Возможно, у вас есть идея, как предотвратить, избегайте этой проблемы.

UPX (против антивирусов)? Скопировать exe-s в локальное место?

Системные администраторы этого клиента являются "нашими врагами", потому что они сказали: "все в порядке". Источник проблемы не идентифицируется...

Спасибо за каждую идею: dd

2 ответа

Предполагая, что ваш анализ верен, и проблема в том, что исполняемый файл находится на сетевом диске с откидным соединением, тогда есть решение. Вам нужно добавить флаги PE в ваш исполняемый файл, который заставляет Windows копировать файл из сети на локальный компьютер, прежде чем запускать его.

Убедитесь, что в вашем приложении .dpr используется предложение Windows. Затем добавьте следующую строку:

{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP}

непосредственно перед begin в вашем .dpr файле. Мы добавили блок Windows, чтобы распознать две константы.


Другая возможность может заключаться в том, чтобы упаковать exe с помощью инструмента upx, например.

http://upx.sourceforge.net/

Он будет разворачивать весь файл в памяти перед запуском.

И это позволит сэкономить полосу пропускания.

licensed under cc by-sa 3.0 with attribution.