Метод 'DeleteFile' объекта 'IFileSystem3' не выполнен. Система зависает, если попытаться удалить / переименовать после этой ошибки

381
IT researcher

У меня есть система с ОС Windows 7. У меня есть один проект автоматизации, который выполняет работу по настройке с использованием оболочки NSIS. Есть много файловых операций, таких как копирование и удаление файлов и т. Д. Когда конкретный файл удаляется в визуальном базовом кодировании, я получаю сообщение об ошибке, например «Метод« DeleteFile »объекта« IFileSystem3 », сбой». Файл для этой ошибки - MDAC_TYP.EXE с размером 5 МБ.

Сценарий:

Диск сервера (Windows Server 2012) сопоставлен с локальной системой Windows 7, и вся операция выполняется на этом сопоставленном диске на клиентском компьютере. И клиент, и сервер подключены к локальной сети 1 Гбит / с. Теперь, когда я запускаю свой проект для сборки установки, он копирует все файлы приложения в папку с именем Temp и затем строит исполняемый файл установки с использованием NSIS (makeNSIS). После создания установки NSIS он удалит все исходные файлы из временной папки и снова скопирует некоторые другие файлы в ту же временную папку для следующей настройки.

Иногда при удалении файла MDAC_TYP.exe я получаю сообщение об ошибке, как указано выше. Есть две папки с одинаковой структурой, которые называются «Build1» и «Build2». Build1 используется для среды тестирования, а Build2 - для производственной среды. Временная папка будет создана в обеих папках во время тестирования и настройки производства.

Вышеупомянутая ошибка возникает как для папок Build1, так и для Build2, и эта ошибка возникает иногда (не каждый раз) для одного и того же исполняемого файла. Файл MDAC_TYP.EXE имеет разрешение только на чтение в том месте, откуда я копирую файл в каталог TEMP внутри build1 и build2 для сценария NSIS. В коде Visual Basic я использую метод FileSystemObject.DeleteFile с параметром force, установленным в true.

Как только появляется ошибка, я не могу переименовать / удалить / переместить файл ни на одном из ПК через UNC или даже на сервере, его нельзя удалить. Если я пытаюсь переименовать / удалить файл или его родительскую папку, система, из которой я пытаюсь удалить / переименовать, зависает. Даже если мы перезагрузим клиентский компьютер, на котором произошла ошибка, операция не решит проблему. Единственное решение, которое я нашел, это перезагрузить мой сервер. После перезагрузки сервера файл можно переименовать или удалить. Другие методы, которые я попробовал, описаны ниже.

  • Проверен дескриптор файла с помощью проводника процессов как на клиенте, так и на сервере - дескрипторы не найдены
  • Проверено Открывать файлы в общих папках сервера. - Не найдено соединение с открытым файлом для файла.
  • Попытка перезагрузки клиентского компьютера - не решена.
  • Попытка удалить / переименовать файл с помощью команды на сервере - невозможно.
  • Пытался удалить / переименовать файл на сервере - без ошибок и без сообщений. Вместо этого сервер застревает.
  • Проверен на наличие проблем с диском, используя chkdisk на сервере. О проблемах не сообщалось.
  • Разрешение папки - у пользователя есть полное разрешение и нет проблем.
  • Пробовал запускать тот же процесс сборки после перезагрузки - все работает нормально. Но снова повторяется через некоторое время / день.
  • Попытка отсоединения подключенного диска во время ошибки существует. Но все равно переименовать не удалось.
  • Нет журнала антивируса / просмотра событий как на клиенте, так и на сервере.

Первоначально ошибка была в моем компьютере с Windows XP. Теперь я обновился до Windows 7 (Свежая установка), и ошибка все еще приходит в новой машине Windows 7.

Обновить:

Я недавно заметил, что такая же ошибка также возникает при удалении файла msstdfmt.dll

Обновление 2:

Я также получил ошибку для файла MS Word, ошибка такая же. Во всех 3 случаях я обнаружил, что есть только одна общая вещь: все 3 файла имеют атрибут только для чтения.

0

0 ответов на вопрос

Похожие вопросы