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

При первой установке моя программа помещает файл в пользовательский каталог AppData, и затем программа будет периодически записывать в этот файл. Проблема в том, что в Vista запись производится не в файл в пользовательском каталоге AppData, а в копию этого файла в каталоге VirtualStore / ProgramData. Исходный файл в пользовательском каталоге AppData никогда не изменяется, кажется, когда программа запускается, у нее есть доступ только к файлу внутри каталога VirtualStore.

Есть ли способ изнутри приложения C # изменить разрешения для этого файла, чтобы моя программа записывала исходный файл в каталоге AppData, а не в каталог VirtualStore?

Спасибо,

Джефф


person Yttrium    schedule 29.01.2009    source источник
comment
Вы устанавливаете свою программу на машину или на пользователя? Повышены ли права вашего установщика? Работаете как администратор?   -  person reuben    schedule 30.01.2009
comment
Да, он работает от имени администратора. Я знаю, что могу настроить файл после его установки, чтобы разрешить полный доступ, но, к сожалению, я этого не сделал. Итак, теперь у пользователей есть файл, который при запуске программы не записывает, а записывает в файл в каталоге VirtualStore. Теперь я хочу это выключить.   -  person Yttrium    schedule 02.02.2009
comment
Вы можете и должны манифестировать свои приложения, чтобы дать Windows команду отключить виртуализацию файлов и реестра. Странно, что в этом и не должно быть необходимости. Пользователь может записывать файлы в свои собственные AppData\Local, AppData\Roaming и AppData\LocalLow. Единственный раз, когда запись в файл виртуализируется, - это если первая запись не удалась с отказом в доступе; Затем Windows молча пытается снова. я бы понял, почему пользователю не разрешено писать в свою собственную папку appdata. Я могу думать только о том, что вы используете защищенный режим или кто-то изменил разрешения.   -  person Ian Boyd    schedule 16.04.2012
comment
Я предполагаю, что описание проблемы неверно. AppData должен быть доступен для записи текущему пользователю. Я думаю, что это ошибка сокращения, и вместо _3 _... имелось в виду ProgramData.   -  person Wolf    schedule 12.03.2021


Ответы (1)


Документация UAC «Разработка приложений UAC для Windows Vista» должен помочь вам решить эту проблему.

Мне кажется, вам нужно добавить манифест приложения.

Когда ваше приложение включает манифест приложения с указанным значением requiredExecutionLevel, виртуализация реестра и файловой системы Vista будет отключена.

Взгляните на Создание и внедрение манифеста приложения (UAC) для уточнения деталей.

Если вы ранее не тестировали свое приложение в условиях, не являющихся администраторами, вы можете обнаружить, что вам нужно внести некоторые изменения в код после отключения виртуализации Vista.

person Antony Perkov    schedule 03.02.2009