Это не «проблема», это особенность. Это называется Контроль учетных записей пользователей (UAC) , и это один из способов повышения безопасности системы в Windows Vista. Windows 7 действительно сохраняет аналогичную модель безопасности.
Нет абсолютно никаких причин, по которым ваше приложение должно в первую очередь связываться с системными папками. Как вы уже узнали, Windows предоставляет приложениям несколько мест для временного и постоянного хранения данных. Microsoft долгое время рекомендовала вам воспользоваться этими папками: они были предпочтительным местом для хранения данных даже в предыдущих версиях Windows. Факт, что вы проигнорировали этот совет, но ваше приложение продолжало работать, на самом деле было ошибкой. Тот факт, что более поздние версии Windows окончательно закрыли эту уязвимость безопасности, тем самым разрушив ваше приложение, не должен быть ни неожиданным, ни недооцененным.
Вы можете найти больше информации о том, где хранить ваши данные на этой странице . Также см. эту статью блога , в которой делается попытка обобщить массив технической документации в удобную таблицу. И, как всегда, Раймонд Чен предоставляет простой, но поучительный обзор различий между локациями:
Самым важным отличием между Моими документами и данными приложения является то, что в «Моих документах» пользователи хранят свои файлы, тогда как данные приложения - там, где программы хранят свои файлы.
Другими словами, если вы положили что-то в CSIDL_MYDOCUMENTS
(Мои документы), вы должны ожидать, что пользователь переименует его, переместит, удалит, отправит по электронной почте своим друзьям, всем виды вещей, которые пользователи делают со своими файлами. Таким образом, файлы, которые идут туда, должны быть вещами, которые пользователи будут распознавать как «свои вещи». Документы, которые они создали, музыка, которую они загрузили, и тому подобное.
С другой стороны, если вы введете что-то в CSIDL_APPDATA
(Данные приложения), пользователь с меньшей вероятностью будет возиться с этим. Здесь вы помещаете данные поддержки вашей программы, которые на самом деле не то, с чем вы хотите, чтобы пользователь связывался, но которые все же должны быть связаны с пользователем. Таблицы рекордов, настройки программы, настройки, исключения проверки орфографии ...
Существует еще один каталог с именем CSIDL_LOCAL_APPDATA
(Локальные настройки \ Данные приложения), который действует как CSIDL_APPDATA
, за исключением того, что он не копируется при перемещении профиля пользователя. (Ветвь «Локальные настройки» не копируется как часть перемещаемого профиля пользователя.) Думайте об этом как о хранилище для каждого пользователя для компьютера. Кеши и аналогичные несущественные данные должны храниться здесь, особенно если они большие. Другими примерами не перемещаемых данных на пользователя являются ваши каталоги %TEMP%
и Temporary Internet Files.