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);

См. Статью Раймонда Чена по этому конкретному вопросу.

Короче говоря, вы просите дыру в безопасности.

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