Разработчики, работающие с Delphi 2010 на операционной системе Windows 7 x64, могут столкнуться с проблемами, связанными с обработкой ярлыков и иконок. В частности, возникают трудности при использовании функций ShellExecute и ShGetFileInfo, которые некорректно обрабатывают пути, содержащие переменную %ProgramFiles%. Это приводит к тому, что вместо использования 64-битных версий программ и иконок, система обращается к 32-битным аналогам.
Проблема
При попытке открыть ярлык с использованием функции ShellExecute в Delphi 2010 на Windows 7 x64, если в целевом пути ярлыка присутствует переменная %ProgramFiles%, происходит ошибка. Вместо ожидаемого пути C:\Program Files, система использует C:\Program Files (x86). Аналогично, функция ShGetFileInfo не может корректно извлечь индекс иконки из системного списка изображений, если путь к файлу иконки содержит %ProgramFiles%.
Решение
Для решения описанных проблем можно использовать функции Windows API Wow64DisableWow64FsRedirection и Wow64RevertWow64FsRedirection. Эти функции позволяют отключить перенаправление файловой системы, что может помочь в корректной работе с 64-битными путями.
Пример кода на Object Pascal (Delphi), демонстрирующий использование этих функций:
var
OldValue: Cardinal;
begin
// Отключаем перенаправление файловой системы
Wow64DisableWow64FsRedirection(OldValue);
try
// Здесь код, который должен работать с 64-битными путями
finally
// Восстанавливаем перенаправление файловой системы
Wow64RevertWow64FsRedirection(OldValue);
end;
end;
Однако, использование Wow64DisableWow64FsRedirection может не решить проблему полностью, так как оно не влияет на обработку переменных окружения. В этом случае может потребоваться ручная настройка переменных окружения.
Пример изменения переменной окружения ProgramFiles:
Также стоит отметить, что после отключения перенаправления файловой системы функция ShellExecute может перестать открывать папки.
Альтернативные Подходы
В качестве альтернативы можно использовать специальные переменные окружения, которые всегда указывают на правильный путь в 64-битной системе, такие как %PROGRAMW6432%. Эти переменные будут недоступны в 32-битной системе, что позволяет разработчикам определять, какая версия программы должна быть запущена.
Заключение
Работа с 32/64-битными программами в Delphi 2010 на Windows 7 x64 требует особого внимания к деталям. Использование функций Wow64DisableWow64FsRedirection и Wow64RevertWow64FsRedirection может помочь в решении некоторых проблем, но может потребоваться дополнительная настройка переменных окружения или использование специальных переменных, доступных только в 64-битной системе.
Разработчики Delphi 2010 на Windows 7 x64 сталкиваются с проблемами при работе с ярлыками и иконками из-за некорректной обработки 32/64-битных путей.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.