Vista и ProgramData
-
02-07-2019 - |
Вопрос
Как правильно хранить файлы данных программы, которые одинаковы для каждого пользователя, но должны быть доступны для записи для программы?Каким будет эквивалентное местоположение в 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);
Видеть Статья Раймонда Чена по этому конкретному вопросу.
Короче говоря, вы просите дыра в безопасности.