У меня есть автоматическая система обновления, которая заменяет мои существующие программные файлы при перезагрузке. (Достаточно сказать, что это очень сложная программа со многими драйверами, службами и модулями уровня пользователя. Нет другого способа. Поверьте мне.)MoveFileEx с удалением MOVEFILE_DELAY_UNTIL_REBOOT, а не с перемещением
Функция MoveFileEx используется с MOVEFILE_DELAY_UNTIL_REBOOT для установки этой замены файла. Я нахожу, что это нормально работает нормально. Однако, если исходный и целевой файлы находятся на разных дисках, цель удаляется, но источник не перемещается. В результате, когда пользователь устанавливает программное обеспечение на диске, отличном от системного раздела, обновление удаляет файл продукта, а не обновляет его.
Теперь я вижу в документации для MoveFileEx, что MOVEFILE_COPY_ALLOWED следует использовать при перемещении файла с одного тома на другой. Но он также говорит, что флаг нельзя использовать с MOVEFILE_DELAY_UNTIL_REBOOT.
В: Как переместить файл при перезагрузке, перезаписав существующий файл, когда источник и цель не находятся на том же томе?
+1 помещаем файлы в поддиремент каталога приложений, ожидающих перезагрузки –
Ну, после некоторых исследований, я думаю, что единственное решение должно делать то, что вы предложили: убедитесь, что исходные файлы находятся на том же томе перед вызовом MoveFileEx. Я думаю, это не слишком сложно, так как у службы есть необходимый доступ. Спасибо за совет. – Charles