Ошибка с атрибутами безопасности файла при копировании файла

StackOverflow https://stackoverflow.com/questions/203036

Вопрос

У меня есть служба Windows, которая обновляет наш продукт.Он копирует файлы продукта во временный каталог, обычно "C:\Windows emp", исправляет двоичные файлы, а затем использует MoveFileEx для копирования файлов обратно в каталог установки при перезагрузке, обычно "C:\Program Files \ Product".Файлы в каталоге установки наследуют свои атрибуты безопасности от родительской папки.После копирования, исправления и перезагрузки в файлах в каталоге установки отсутствуют некоторые списки управления доступом.В частности, файлы больше не имеют ACL для группы пользователей, поэтому пользователи больше не могут запускать программу после перезагрузки.

Кто-нибудь может объяснить, что здесь происходит?Похоже, что при копировании из каталога установки во временный каталог файлы наследуют списки управления доступом временного каталога.Однако при MoveFileEx / Reboot файлы наследуют только списки управления доступом, которые являются общими для каталогов install и temp.

Это было полезно?

Решение

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

Временный каталог обычно расположен под профилем пользователя (здесь обычно указаны % TMP% и %TEMP%), поэтому для копирования файлов сюда будут предоставлены разрешения для этого пользователя.При перемещении этих файлов в каталог program files для них будут предоставлены права только этого пользователя, и, следовательно, они будут доступны только устанавливающему пользователю.

Другие советы

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

Если вы действительно хотите переместить их в другое место, создание временной папки в том же месте, что и файлы, подлежащие исправлению, поможет сохранить разрешения прежними, предполагая, что каталог использует унаследованные разрешения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top