Windows 7 ограничивает доступ к папкам, как Vista?

Я заметил, что в моем приложении большинство проблем с совместимостью было вызвано "доступом запрещен" для некоторых папок, таких как:

Application Data [C:\ProgramData]
Desktop [C:\Users\Public\Desktop]
Documents [C:\Users\Public\Documents]
Favorites [C:\Users\Public\Favorites]
Start Menu [C:\ProgramData\Microsoft\Windows\Start Menu]
Templates [C:\ProgramData\Microsoft\Windows\Templates]

Windows 7 имеет ту же проблему, что и Vista? С помощью членов Stack Overflow я знаю, что в Vista я могу использовать CSIDL_APPDATA включить доступ к файлу без проблем UAC или ошибок "доступ запрещен". Это также верно для Windows 7?

1 ответ

Решение

Это не "проблема", это особенность. Он называется " Контроль учетных записей пользователей" (UAC), и это один из способов повышения безопасности системы в Windows Vista. Windows 7 действительно сохраняет подобную модель безопасности.

Нет абсолютно никаких причин, по которым ваше приложение должно в первую очередь связываться с системными папками. Как вы уже узнали, Windows предоставляет приложениям несколько мест для временного и постоянного хранения данных. Microsoft долгое время рекомендовала вам воспользоваться этими папками: они были предпочтительным местом для хранения данных даже в предыдущих версиях Windows. Факт, что вы проигнорировали этот совет, но ваше приложение продолжало работать, на самом деле было ошибкой. Тот факт, что более поздние версии Windows окончательно закрыли эту уязвимость безопасности, тем самым разрушив ваше приложение, не должен быть ни неожиданным, ни недооцененным.

Вы можете найти больше информации о том, где хранить ваши данные на этой странице. Также посмотрите эту статью в блоге, которая пытается обобщить массив технической документации в удобную таблицу. И, как всегда, Раймонд Чен предлагает простой, но поучительный обзор различий между местами:

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

Другими словами, если вы положили что-то в CSIDL_MYDOCUMENTS (Мои документы), вы должны ожидать, что пользователь переименует его, переместит, удалит, отправит по электронной почте своим друзьям, все виды действий, которые пользователи делают со своими файлами. Таким образом, файлы, которые идут туда, должны быть вещами, которые пользователи будут распознавать как "свои вещи". Документы, которые они создали, музыка, которую они загрузили, и тому подобное.

С другой стороны, если вы положите что-то в CSIDL_APPDATA (Данные приложения), пользователь с меньшей вероятностью будет возиться с этим. Здесь вы помещаете данные поддержки вашей программы, которые на самом деле не то, с чем вы хотите, чтобы пользователь связывался, но которые все же должны быть связаны с пользователем. Таблицы рекордов, настройки программы, настройки, исключения для проверки орфографии...

Существует еще один каталог под названием CSIDL_LOCAL_APPDATA (Локальные настройки \ Данные приложения), который действует как CSIDL_APPDATA За исключением того, что он не копируется, если перемещается профиль пользователя. (Ветвь "Локальные настройки" не копируется как часть перемещаемого профиля пользователя.) Думайте об этом как о хранилище для каждого пользователя для компьютера. Кеши и подобные несущественные данные должны храниться здесь, особенно если они большие. Другими примерами не-роуминговых данных на пользователя являются ваши %TEMP% и каталоги временных файлов Интернета.

Другие вопросы по тегам