Пришлось намедни оживить старый проект написанный на Delphi 5. Взял виртуалку с 2003 виндой, которую по нынешним действительно можно назвать микро-софтом, потому что в загруженном состоянии съедает меньше 100 мегабайт оперативки. “Откопал” старые дистрибутивчики, наборы VCL, всё поставил, настроил, открыл проект и всё нормально скомпилировал. И тут мне понадобилось зайти в опции проекта, чтобы добавить пути к новым библиотекам которые нужно было добавить в проект. И тут я получил
Первой мыслью было что моя любовь работать не от админа привела к такому результату. Я решил что Delphi пытался что-то записать в каталог “Program files” который я ревностно охраняю от посягательств блокируя его изменение пользователями. Чтобы проверить это я сделал тоже самое от аккаунта администратора. Оказалось проблема не в этом. Затем запустил Delphi 7 и в пустом проекте попытался открыть окно опций проекта. И получил такую же ошибку. Не поверив своим глазам я полез в NTFS настройки каталога “Program files” и сбросил все настройки для всех вложенных объектов. Ошибка осталась. Гугление не привело к ответу. Я начал вспоминать что последний раз я работал над проектом в среде Delphi на своём стареньком ноутбуке где была установлена Windows XP. Проверил на XP — там всё работает. После нескольких подходов с перерывами к проблеме нашёлся ответ. В моей Windows XP небыло SP1 и нет опции Execution Prevention (DEP). А в 2003 сервере и 2008 опция имеется.
DEP не позволяет программам выполнять данные (Старые процессоры это не поддерживали).
По умолчанию DEP включён только для жизненно важных программ и сервисов Windows. Но я включаю эту опцию чтобы защитить другие программы. Как видно Delphi относится к тем программам для которых нужно включить исключение.
После манипуляций с исключениями DEP программу нужно перезагрузить.