SHGetFolderPath () с CSIDL CSIDL_COMMON_APPDATA.
Read больше в http://msdn.microsoft.com/en-us/library/bb762181 (По сравнению с 85) .aspx
при необходимости в пути в пакетном файле можно также использовать %ALLUSERSPROFILE переменную среды %.
На самом деле SHGetFolderPath
удерживается от использования.
SHGetKnownFolderPath
должен использоваться вместо этого.
Существует большая сводка различных вариантов здесь: http://blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx
Где я должен записать данные программы вместо программных файлов?
Обновление кода распространенного приложения - это: "мое приложение раньше писало файлы в программные файлы. Было похоже на столь же хорошее место для помещения его как любой другой. Это уже имело название моего приложения на нем, и потому что мои пользователи были администраторами, это хорошо работало. Но теперь я вижу, что это не может быть столь же большим местом для засовывания вещей, как я когда-то думал, потому что с контролем учётных записей даже Администраторы, выполненные со стандартными подобными пользователю полномочиями большую часть времени. Так, куда я должен поместить свои файлы вместо этого?"
Можно использовать:
CString strPath;
::SHGetSpecialFolderPath(NULL, strPath.GetBuffer(1024), CSIDL_COMMON_APPDATA, FALSE);
См. статья Raymond Chen об этом конкретном вопросе .
Короче говоря Вы просите дыра в системе безопасности .