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

Проблема открытых файлов на 32-битном сервере из 64-битного клиента Windows 7

Delphi , Синтаксис , Справочник по API-функциям

Проблема открытия файлов на 32-битном сервере из 64-битного клиента Windows 7

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

Описание проблемы

Когда вы открываете файл, находящийся в общей папке на 32-битном сервере с помощью 64-битного клиента Windows 7, читаете его содержимое, затем блокируете файл и снова открываете его, вы можете обнаружить, что файл остается открытым даже после закрытия всех известных дескрипторов. Это поведение может быть выявлено через "Диспетчер компьютеров" на сервере.

Шаги воспроизведения

  1. Разместите файл размером от 7000 до 10000 байт в общей папке на 32-битном сервере, например, Windows Server 2003.
  2. Скомпилируйте следующий код для Win32, чтобы он работал в среде WOW64 (Windows 32-bit on Windows 64-bit).
  3. Запустите приложение на 64-битном клиенте Windows 7, при этом файл должен находиться на 32-битном сервере.
  4. Завершите работу приложения.
  5. Проверьте "Диспетчер компьютеров" на сервере, чтобы увидеть, что файл все еще открыт.
procedure CauseFileLockBug(FileName: PChar);
var
  FileHandle1, FileHandle2: LongInt;
  Buffer: Pointer;
  BytesRead: Cardinal;
begin
  // Код для создания файлового дескриптора, чтения, блокировки и повторного открытия файла
  // ...
end;

Условия решения проблемы

Проблема не возникает, если при повторном открытии файла используется флаг FILE_FLAG_NO_BUFFERING или если файл не читается перед блокировкой.

Подтвержденное решение

Проблема была решена путем добавления всех возможных путей к папке (все сетевые пути и диски, на которые осуществляется маппинг) в список исключений антивируса NOD32 x64 с использованием символа подстановки *, после чего был перезагружен компьютер.

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

Дополнительные исследования показали, что правильное значение для аргументов dwFileOffsetHigh и nNumberOfBytesToLockHigh в функции LockFile имеет значение и должно быть задано корректно, даже если это значение равно нулю.

Заключение

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

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

Проблема заключается в том, что при использовании 64-битного клиента Windows 7 для доступа к файлам на 32-битном сервере, файлы могут оставаться открытыми после их закрытия, что приводит к невозможности их использования другими процессами и приложениями.


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

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




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


:: Главная :: Справочник по API-функциям ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 14:00:18/0.0033190250396729/0