Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправление зависаний в Delphi-приложениях на удалённом рабочем столе Windows 2008 Enterprise R2

Delphi , ОС и Железо , Windows

Объяснение проблемы:

Пользователь столкнулся с проблемой, когда его Delphi-приложение, запускающее второе исполняемое файло, замораживало при попытке открыть диалоговое окно для выбора файла в режиме удаленного рабочего стола Windows 2008 Enterprise R2. Это происходило только в случае, когда приложение запускалось как удаленное приложение, и единственным способом выхода из ситуации было принудительное завершение работы приложения.

Контекст и решение проблемы:

Исходный код, который приводит к проблеме, был представлен в сообщении от 2010.07.13, где описывается, как первый исполняемый файл запускает второй, который в свою очередь пытается открыть диалоговое окно для выбора файла. В обновлении от 2010.07.14 было обнаружено, что копирование определенных DLL из папки \\Windows\\System32 в папку с приложением устраняет проблему. Также было отмечено, что изменение прав доступа к этим DLL на права администратора имеет аналогичный эффект.

В обновлении от 2010.07.18 предоставлена дополнительная информация от Embarcadero, включая ссылки на статьи MSDN, которые могут быть полезны для понимания поведения приложений в терминальных службах. Упоминается, что приложение может заморажить из-за попытки обращения к реальному DLL в системной директории вместо "песочницы" пользователя, что может привести к нарушению прав доступа. Также упоминается флаг IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE, который можно добавить в заголовок PE приложения для обхода слоя совместимости.

Подтвержденный ответ:

Проблема заключалась в доступе к определенным DLL, которые должны быть в "песочнице" пользователя при работе в терминальных службах. Копирование этих DLL в папку с приложением или изменение прав доступа к ним на права администратора позволяло решить проблему.

Альтернативный ответ:

В качестве альтернативного решения предлагается использовать собственный диалоговый компонент для выбора файлов, который будет работать корректно в режиме удаленного рабочего стола. Также упоминаются инструменты Process Explorer и Process Monitor для мониторинга процессов и загрузки DLL.

Статья:

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

Проблема

Разработчики, использующие Delphi для создания приложений, могут столкнуться с трудностями при работе с диалоговыми окнами в режиме удаленного рабочего стола. В частности, при попытке открыть диалоговое окно для выбора файла в приложениях, запущенных через удаленный доступ на Windows 2008 Enterprise R2, может произойти зависание, приводящее к "залипанию" всего интерфейса приложения.

Пример кода
procedure TForm1.Button1Click(Sender: TObject);
begin
    OpenDialog1.Execute;
end;

Вызов OpenDialog1.Execute в приложении, запущенном как удаленное, может привести к зависанию.

Рассмотрим решение

Обратим внимание на сообщения от пользователей, которые указывают на проблему доступа к определенным библиотекам. Копирование следующих DLL из системной папки Windows в папку с приложением или изменение прав доступа к ним на права администратора может устранить проблему: - thumbcache.dll - dtsh.dll - wkscli.dll

// Копирование DLL не требуется, если следовать альтернативному решению
Альтернативное решение

Для предотвращения зависаний в будущем можно использовать флаг IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE, который позволяет приложению обходить слой совместимости, предназначенный для терминальных служб. Для включения этого флага необходимо добавить соответствующую директиву в раздел USES вашего проекта:

{$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}

Это изменение в заголовке PE приложения позволит ему правильно функционировать в среде удаленного рабочего стола.

Дополнительные рекомендации

Для глубокого анализа проблем, связанных с загрузкой DLL и взаимодействием с системными компонентами, рекомендуется использовать инструменты Process Explorer и Process Monitor. Эти инструменты позволят отследить загрузку библиотек и помочь выявить потенциальные проблемы доступа.

Заключение

Использование Object Pascal и Delphi для создания приложений, совместимых с удаленным доступом, требует особого внимания к деталям, таким как доступ к системным ресурсам и взаимодействие с компонентами операционной системы. Применение предложенных решений позволит избежать зависаний и обеспечит стабильную работу приложений в условиях удаленного рабочего стола.


Это базовый шаблон статьи, который можно дополнить примерами кода, более подробными инструкциями по настройке среды и другими полезными советами для разработчиков, работающих с Delphi и Pascal.

Создано по материалам из источника по ссылке.

Пользователь столкнулся с проблемой зависания Delphi-приложения при попытке открыть диалоговое окно для выбора файла в режиме удаленного рабочего стола Windows 2008 Enterprise R2, что было связано с неправильным доступом к определенным DLL и могло быть р


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Windows ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 01:38:55/0.0036559104919434/0