Файлы, которые в данный момент открыты или используются в Windows, нельзя перемещать или удалять до тех пор, пока они не будут закрыты. Большую часть времени закрытие связанной программы будет выполнять эту работу, но иногда она все равно не будет работать, поскольку она сопоставлена с памятью или защищена другим процессом. Для решения этой проблемы большинство из нас просто полагалось бы на стороннее программное обеспечение, такое как FileASSASSIN, LockHunter, IObit Unlocker, BlitzBlank и т. Д., Которое способно обнаруживать заблокированные файлы и пытаться разблокировать их для дальнейших действий. Разблокировка заблокированных файлов имеет свой собственный риск, который может привести к сбоям в операционной системе.
Более безопасное решение – пометить файл для удаления при следующей перезагрузке, и операционная система Microsoft Windows упростила разработчикам, поскольку она поставляется с API MoveFileEx для удаления или переименования / перемещения файлов при следующей загрузке системы. Эта задача выполняется путем чтения записи реестра под названием PendingFileRenameOperations находится по адресу HKLM SYSTEM CurrentControlSet Control Session Manager. Обратите внимание, что раздел реестра PendingFileRenameOperations не будет существовать, если не будет ожидающей операции.
Если вам не нравится возиться с реестром Windows, у нас есть несколько бесплатных инструментов, которые могут помочь вам прочитать ключи PendingFileRenameOperations и отобразить список ожидающих файловых операций. Некоторые из них позволяют планировать перемещение и удалять команды для следующей перезагрузки.
1. PendMoves и MoveFile
PendMoves – это простое приложение командной строки от Windows Sysinternals, где оно может читать ключи PendingFileRenameOperations и отображать список файлов, которые будут либо удалены, либо перемещены в новое целевое местоположение. Пустая цель будет отображаться как DELETE, иначе это будет новое место, куда будет перемещен исходный файл.
Поскольку PendMoves является приложением командной строки, его необходимо запустить из командной строки, чтобы увидеть результаты, иначе вы получите только мигающее черное окно, открывающееся и закрывающееся само по себе. Нажмите WIN + R, введите CMD в поле «Выполнить» и нажмите «ОК». Перейдите в каталог, в котором находится pendmoves.exe, и введите имя файла для запуска приложения.
Отдельное приложение с именем MoveFile, которое связано с PendMoves в архиве, предназначено для добавления записи в PendingFileRenameOperations, чтобы запланировать удаление или перемещение файла при следующей загрузке Windows. Просто укажите источник и место назначения для перемещения файла или оставьте место назначения пустым с двумя двойными кавычками, чтобы удалить источник.
Приведенный ниже пример команды переместит test.zip из C: на рабочий стол учетной записи пользователя Raymond.
C: movefile.exe c: test.zip c: raymond user desktop test.zip
Приведенная ниже команда запланирует удаление файла test.zip при следующей загрузке Windows.
C: movefile.exe c: test.zip «»
Скачать PendMoves и MoveFile
2. WhyReboot
Если вы предпочитаете более удобный инструмент с графическим пользовательским интерфейсом, WhyReboot будет вашим выбором. WhyReboot – это небольшой и портативный инструмент, который отображает список ожидающих файловых операций и дополнительно раздел реестра RunOnce. Раздел реестра RunOnce – это инструкция для Windows автоматически запускать указанную программу только один раз во время запуска, и этот ключ будет удален после обработки запроса.
Хотя WhyReboot создан для того, чтобы определить, следует ли перезагрузить компьютер при появлении запроса после установки программы или обновления, он все еще довольно далек от того, чтобы сделать это. WhyReboot не может сообщить вам, был ли заменен важный драйвер ядра или файл DLL, и требует перезагрузки для загрузки, что довольно часто встречается в программах, основанных на безопасности, таких как антивирусные программы.
Скачать WhyReboot
3. WMI VBScript
Для администраторов или программистов, которые предпочитают сценарии для гибкости при внедрении автоматизации, мы нашли удобный WMI VBScript, написанный Томом Миллсом (Tom Mills), архитектором решений со службами Microsoft. По сути, файл VBS выполняет чтение и анализ PendingFileRenameOperations, показывая результат во всплывающем окне.
Код VBS можно получить на официальном сайте блога Tom Mills MSDN или скачать скрипт ниже.
Скачать файл CheckPendingFileRenameOperations.vbs
4. MoveEx
Существует две версии MoveEx, одна из которых создана Александром Фринком, которую можно найти в Softpedia, другая – Фрэнк Вестлейк из ss64.net, и мы показываем последнюю. Причиной, по которой мы предпочитаем MoveEx Фрэнка, а не Александра, является возможность удалять отдельные записи в PendingFileRenameOperations, а не просто анализировать и отображать операцию.
Чтобы просмотреть записи PendingFileRenameOperations, просто запустите приложение в командной строке. Чтобы удалить отдельную запись PendingFileRenameOperations, вам нужно добавить / d вместе с номером записи, который отображается при запуске MoveEx без аргумента командной строки. Как вы можете видеть на скриншоте выше, первая команда перечисляет все записи в PendingFileRenameOperations, а вторая команда, имеющая «/ d 003», удаляет третью запись.
Добавление записи PendingFileRenameOperations с использованием MoveEx аналогично MoveFile из Sysinternals, который указывает источник, за которым следует цель. Если оставить целевой объект пустым, Windows удалит исходный файл.
Скачать MoveEx
5. Добавить или удалить запись PendingFileRenameOperations вручную
Нет проблем в ручном удалении ключа PendingFileRenameOperations из системного реестра, но добавить запись сложно, поскольку это значение REG_MULTI_SZ, а не обычная строка или DWORD. Чтобы удалить, просто перейдите к HKLM SYSTEM CurrentControlSet Control Session Manager в реестре и удалите ключ PendingFileRenameOperations.
Чтобы добавить запись об удалении, перейдите в HKLM SYSTEM CurrentControlSet Control Session Manager щелкните правой кнопкой мыши на правой панели, перейдите в New, выберите Multi-String Value и назовите это как PendingFileRenameOperations, Дважды щелкните по вновь созданному значению реестра и введите полное местоположение файла, начиная с ?? (например, ?? C: raymondcc.exe), который вы хотите запланировать для удаления. Нажмите OK, когда вы закончите. Теперь щелкните правой кнопкой мыши на PendingFileRenameOperations и выберите Изменить двоичные данные, Вы должны увидеть кучу цифр в данных значения. Введите четыре нуля «00 00» без кавычек в конце шестнадцатеричной строки и нажмите ОК. Перезагрузите компьютер, и файл будет удален.
Как ни странно, планирование операции перемещения файла во время загрузки Windows с использованием PendingFileRenameOperations намного проще по сравнению с удалением, поскольку не требует изменения двоичных данных в реестре. Следуйте приведенным выше инструкциям, пока не дойдете до детали, чтобы добавить данные значения в поле «Изменить несколько строк». Вам нужно указать два пути, который является источником и целью. Пример ниже переместит файл raymondcc.exe из C: source в c: target.
?? C: источник raymondcc.exe ?? C: цель raymondcc.exe