Bezdepbonusu7Программирование: статьи и ответы

Вопрос

MoveFileEx с MOVEFILE_DELAY_UNTIL_REBOOT удаляет, а не перемещает

Автор вопроса: CharlesОтветов: 1

У меня есть система автоматического обновления, которая заменяет мои существующие программные файлы при перезагрузке. (Достаточно сказать, что это очень сложная программа с множеством драйверов, служб и модулей пользовательского уровня. Другого пути действительно нет. Поверьте мне.)

Функция MoveFileEx используется с MOVEFILE_DELAY_UNTIL_REBOOT для настройки замены этого файла. Я нахожу, что это работает просто отлично, нормально. Однако если исходный и целевой файлы находятся на разных дисках, цель удаляется, но источник не перемещается. В результате, когда пользователь устанавливает программное обеспечение на диск, отличный от системного раздела, обновление удаляет файл продукта, а не обновляет его.

Теперь я вижу в документации для MoveFileEx, что MOVEFILE_COPY_ALLOWED следует использовать при перемещении файла с одного тома на другой. Но также говорится, что флаг нельзя использовать с MOVEFILE_DELAY_UNTIL_REBOOT.

В: Как я могу переместить файл при перезагрузке, перезаписав существующий файл, если исходный и целевой файлы не находятся на одном томе?

winapimovefileex

Ответы

Ответ 1 · рейтинг 2 · devdimi

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

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

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

Еще один простой механизм обновления, который я использовал (хотя и не работающий для драйверов), заключается в том, чтобы иметь специальную программу обновления - убить/завершить все, позволить программе обновления выполнить свою работу и запустить все заново.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы