Как пропустить VirtualStore и прочитать файлы в папке Program Files?

У меня есть приложение c# на Windows 10 PC. В папке установки есть файлы настроек (C:Program файлы (x86)xxx), которые я хочу прочитать, но не редактировать, если у пользователя нет доступа администратора. Проблема в том, что windows копирует эти файлы настроек в VirtualStore и перенаправляет все чтения туда, в то время как то же приложение, запущенное как admin, видит исходные файлы настроек в папке Program Files.

мой вопрос: есть ли способ, чтобы заставить приложение видеть исходные файлы в файлах программы, даже если они не запускаются как admin? Я просто хочу их прочитать, а не редактировать.

2 ответов


вам не нужны повышенные права для чтения файла из Program Files (x86) папка. Проверьте, как вы открываете файл для чтения. Вы должны указать разные FileAccess флаг в обычном пользовательском режиме и в повышенном режиме. Для общего пользовательского режима он должен быть открыт с помощью " FileAccess.Читайте':

using (FileStream settingsFile = new FileStream(@"C:\Program Files (x86)\xxx", FileMode.Open, FileAccess.Read))
{
  // Do the job
}

чтобы определить, работает ли приложение с повышенными разрешениями, используйте IsProcessElevated метод. В зависимости от результата вы можете выбрать правильный FileAccess режим.


способ увидеть исходные файлы в Program Files-не писать там (и с этой целью открывать файлы только для чтения, как указывает Никита). VirtualStore не используется, но для устранения проблем с приложением. Такие проблемы вызваны, например, сломанными приложениями, написанными для старых однопользовательских окон, когда окна текущего дня (начиная с NT) могут иметь несколько сеансов одновременно от разных пользователей.

Если приложение хочет изменить файлы данных, общие для всех пользователей, он должен сохранять файлы в профиле всех пользователей. Если это данные пользователя, он может хранить данные в папке Application Data в профиле пользователя. В данных приложения вы все еще остаетесь с опцией, если вы хотите, чтобы данные были перемещаемыми или локальными.

пути к этим папкам различны в разных версиях Windows. Установщик Windows имеет свойства, установленные для путей. Приложения имеют много интерфейсов, которые они могут использовать. См.работа с известными папками в приложениях и SHGetKnownFolderPath на одном интерфейсе.

кроме этого, доступ к программным файлам находится за УАК. Вы должны прочитать на нем, чтобы получить все детали правильно.