Ответ 1
SHGetFolderPath() с CSIDL из CSIDL_COMMON_APPDATA.
Подробнее на http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx
Если вам нужен путь в пакетном файле, вы также можете использовать переменную среды% ALLUSERSPROFILE%.
Какое место следует хранить для хранения файлов данных программы, которые одинаковы для каждого пользователя, но должны быть записаны для программы? Каким будет эквивалентное местоположение в 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
устарел.
Вы можете использовать:
CString strPath;
::SHGetSpecialFolderPath(NULL, strPath.GetBuffer(1024), CSIDL_COMMON_APPDATA, FALSE);
См. статья Раймонда Чена по этому конкретному вопросу.
Короче говоря, вы запрашиваете дыру безопасности.