Как известно, в оффтопике нельзя переписать открытый файл. Документированный воркэраунд просто фееричен. Отсюда и следуют все эти «для завершения утановки необходимо перезапустить компьютер».
Итак:
Если системный файл, который установщик пытается заменить, занят, то установщик перезаписывает его с опцией MOVEFILE_DELAY_UNTIL_REBOOT — чтобы занятый файл заменился при перезагрузке системы:
// Код упрощен для ясности MoveFileEx(«sysfile.new», «sysfile.dll», MOVEFILE_DELAY_UNTIL_REBOOT); CopyFile(«D:\\CDROM\\INSTALL\\sysfile.dll», «sysfile.new»);
---------------
Я плакалъ.