Вопрос

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

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top