Vista и ProgramData
Как правильно хранить файлы данных программы, которые одинаковы для каждого пользователя, но должны быть доступны для записи для программы? Каким будет эквивалентное расположение в MS Windows XP? Я прочитал, что C:\ProgramData не доступен для записи после установки обычными пользователями. Это правда? Как я могу получить этот каталог программно, используя Platform SDK?
5 ответов
SHGetFolderPath() с CSIDL из CSIDL_COMMON_APPDATA.
Узнайте больше на http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx
Если вам нужен путь в пакетном файле, вы также можете использовать переменную среды%ALLUSERSPROFILE%.
Здесь есть большое резюме различных вариантов: http://blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx
Где я должен записывать программные данные вместо программных файлов?
Обычное обновление кода приложения таково: "мое приложение использовалось для записи файлов в программные файлы. Оно было таким же хорошим местом для размещения его, как и любое другое. Оно уже имело имя моего приложения, и поскольку мои пользователи были администраторами, оно работал нормально. Но теперь я вижу, что это может быть не настолько хорошим местом для размещения вещей, как я когда-то думал, потому что с UAC большую часть времени даже администраторы работают со стандартными пользовательскими привилегиями. Итак, где я должен поместить свои файлы вместо?"
На самом деле SHGetFolderPath
устарела.
SHGetKnownFolderPath
следует использовать вместо
Ты можешь использовать:
CString strPath;
::SHGetSpecialFolderPath(NULL, strPath.GetBuffer(1024), CSIDL_COMMON_APPDATA, FALSE);
См. Статью Раймонда Чена по этому конкретному вопросу.
Короче говоря, вы просите дыру в безопасности.