Delphi скопировать файлы в systemdir проблема в Windows 7 - PullRequest
1 голос
/ 27 июня 2011

я могу использовать copyfile (); Функция для копирования файла в C: / Windows / System32 на Windows XP, но затем я использую функцию на Windows 7, я не могу скопировать его: o файл не придет туда ....

У меня была такая же проблема с записью и чтением регистра, но я исправил ее, объявив ключ WOW $ 0100 ...

Я думаю, что проблема в UAC, но не уверен .. кто-нибудь может мне это объяснить: D?

Ответы [ 3 ]

6 голосов
/ 27 июня 2011

Это действительно из-за UAC.Он называется Файл / Папка или Реестр Виртуализация.Это сделано для устаревших приложений, которые еще не соблюдают новые правила UAC (например, не пишут в системные папки, если вы не являетесь администратором).

Создав файл манифеста, вы отключаете эту виртуализацию.Смотрите здесь .Это может быть отдельный файл или встроенный в исполняемый файл.Более новые версии Delphi уже генерируют исполняемые файлы, содержащие такой манифест, и для свойства requestExecutionLevel установлено значение asInvoker.Обычно это не позволяет писать в этих местах, если пользователи специально не запускают вашу программу от имени администратора.Установка его для requireAdministrator разрешает запись в этих местах, но также означает, что пользователи должны подтвердить, что они хотят запустить вашу программу от имени администратора.

5 голосов
/ 27 июня 2011

Это действительно UAC, который мешает вам копировать файлы в папку system32. Вы должны спросить себя, почему вы хотите копировать файлы туда. Обычное приложение должно никогда копировать файлы в папку system32.

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

1 голос
/ 27 июня 2011

Почему вы копируете туда файлы?Его следует рассматривать как каталог OS private .Если вы не устанавливаете драйвер или что-то подобное, вы должны никогда писать там.В XP вы можете только потому, что вы работаете с привилегиями Администратора, попробуйте использовать обычного пользователя, и вы тоже не сможете (хотя бы с 2000, если не в NT уже), но он выдаст вам ошибку, потому что выигралПереадресация записи.Если у вас нет действительно веских причин для написания там, я бы предложил изменить дизайн вашего приложения, чтобы писать в нужном месте, вместо того, чтобы пытаться найти способ писать там.В любом случае, произойдет сбой, когда пользователь не имеет прав и не может выполнить повышение прав.

...