Короткая версия : проверьте, есть ли у вас виртуализированные папки в:
%LocalAppData%\VirtualStore
.
Если вы видите перенаправленный файл, написанный здесь, то вы видите результат перенаправленной записи файла из-за отсутствия разрешений на запись в
оригинальное местоположение. Это управляемая политикой функция с множеством ошибок, о которых нужно знать. Подробности ниже.
Битность? : Вы уверены, что ищете нужную папку? Вы проверяли Program Files (x86)
, чтобы быть уверенным?
Виртуализация / перенаправление данных : Мне интересно, есть ли у вас политики, позволяющие автоматически перенаправлять неудачные записи в защищенных папках в другое доступное для записи место? Контроль учетных записей пользователей: виртуализировать ошибки записи файлов и реестра в местоположения отдельных пользователей .
Запись политики перенаправления данных / виртуализации :
Примечание : Апплет локальной политики безопасности доступен только в профессиональных, корпоративных и корпоративных версиях Windows. Это будет не хватать в «домашних изданиях».
Чтобы найти и изменить эту политику, выполните следующие действия (или аналогичные другие способы):
Windows Key
+ кран R
.
- Копирование и вставка:
%windir%\system32\secpol.msc /s
.
- Нажмите
OK
или нажмите Enter
.
- Перейдите к:
Local Policies\Security Options
. Поиск записи: User Account Control: Virtualize file and registry write failures to per-user locations
.
- Установлен ли этот параметр на «
Activated
»?
Предварительные условия : Даже если этот параметр активирован, перенаправление работает только при очень определенных обстоятельствах.
Чтобы программа была пригодна для виртуализации, она должна соответствовать следующим требованиям:
- Битность : программа должна быть 32-битной.
- Права доступа : не должен запускаться с правами администратора.
- Манифест : не должен быть скомпилирован с файлом манифеста
(указывая, что это для Vista или позже). Или вы закомментируете безопасность
раздел.
(технические подробности о том, как создать тестовое приложение, см. Ниже).
Все это из этого источника . И вот еще один SO-ответ .
Диспетчер задач и виртуализация : Вы можете увидеть virtualization status
программы, добавив Virtualization column
к Страница процессов в диспетчере задач (в Windows 10 используется представление Details - там должно быть что-то вроде UAC-Virtualization):
Куда это записывает? : Если этот параметр перенаправления / виртуализации данных активен, журнал автоматически перенаправляется в доступное для записи место, в то же время показывая исходный путь в приложении. Пожалуйста, проверьте под: %LocalAppData%\VirtualStore
. Процедура:
Windows Key
+ кран R
.
- Копирование и вставка:
%LocalAppData%\VirtualStore
.
- Нажмите
OK
или нажмите Enter
.
- Проверить подпапки (если есть).
Решение : Эту проблему можно решить несколькими способами.
Место записи : Пишите прямо в доступное для записи место - по замыслу. На мой взгляд, это единственный разумный подход на будущее.
Разрешения ACL : Вы можете открыть разрешение на запись в указанное место и разрешить пользователям или всем пользователям доступ для записи. я делаю
не такой подход с точки зрения безопасности.
Повышение : я полагаю, вы можете запустить приложение с правами администратора с помощью манифеста повышения прав. Мне очень не нравится это
подход. Повышенным приложениям дают «ключи от города» ипредставляют серьезную угрозу безопасности.
Есть некоторые ароматы этих "решений", но я думаю, что я буду
предложить эти три на данный момент. Может быть, проверьте ссылки ниже.
Технические примечания : Только для записи. Что касается тестового приложения, которое я использовал для отладки:
- Стандартное приложение Windows Forms C #.
- При событии нажатия кнопки или непосредственно в основной функции:
File.WriteAllText(@"C:\Program Files\My folder\TestFile.txt", "Test");
(сначала создайте путь и настройте часть "Program Files" на свой язык)
Project
=> Add New Item...
=> Application Manifest File
.
- Закомментируйте весь раздел
"Security"
.
- Скомпилируйте 32-битный исполняемый файл.
Теперь попробуйте собрать и запустить. Вы должны увидеть приложение, активированное для виртуализации, в столбце UAC-Virtualization из Диспетчер задач (снимок экрана выше). Нажатие кнопки должно записать в %LocalAppData%\VirtualStore
, если активна политика перенаправления данных / виртуализации.
Некоторые ссылки :