Vista и ProgramData - PullRequest
       65

Vista и ProgramData

15 голосов
/ 25 сентября 2008

Какое место для хранения файлов данных программы, которые одинаковы для каждого пользователя, но должны быть доступны для записи для программы? Каково было бы эквивалентное местоположение на MS Windows XP? Я прочитал, что C: \ ProgramData не доступен для записи после установки обычными пользователями. Это правда? Как я могу получить этот каталог программно, используя Platform SDK?

Ответы [ 5 ]

8 голосов
/ 25 сентября 2008

SHGetFolderPath () с CSIDL из CSIDL_COMMON_APPDATA.

Подробнее на http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx

Если вам нужен путь в пакетном файле, вы также можете использовать переменную среды% ALLUSERSPROFILE%.

7 голосов
/ 24 ноября 2008

Здесь вы найдете множество различных вариантов: http://blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx

Где я должен записывать данные программы Вместо программных файлов?

Общее обновление кода приложения это: "мое приложение раньше писало файлы в программные файлы. Это было похоже на так же хорошо, как и любое другое место Другой. Это было имя моего приложения на это уже, и потому что мои пользователи админы, все работало нормально. Но теперь я вижу что это может быть не так здорово, место придерживаться вещей, как я когда-то думал, потому что с UAC даже администраторы запускать со стандартными пользовательскими привилегиями большую часть времени. Итак, где я должен положить мои файлы вместо этого? "

4 голосов
/ 12 февраля 2009

На самом деле SHGetFolderPath устарело.

SHGetKnownFolderPath следует использовать вместо

1 голос
/ 25 сентября 2008

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

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

1 голос
/ 25 сентября 2008

Вы можете использовать:

CString strPath;
::SHGetSpecialFolderPath(NULL, strPath.GetBuffer(1024), CSIDL_COMMON_APPDATA, FALSE);
...