Это сообщение в блоге об этом: blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx (Мне еще не разрешено использовать гиперссылку, вам придется вырезать-в-вставить до тех пор, пока она не будет исправлена).
На самом деле это похоже на конкретный вопрос: если у вас есть файлы, которые должны быть доступны для записи всем пользователям, вы ожидаете, что пользователь обнаружит файлы в проводнике и сможет их дважды щелкнуть, или вы хотите, чтобы файлы были скрыты и использовались только в фоновом режиме вашим приложением.
Если вы хотите, чтобы файлы были доступны для просмотра в Проводнике всеми пользователями, вы, вероятно, захотите разместить их в каталоге c: \ users \ public. Все, что вам нужно сделать, это поместить их в это место, и безопасность по умолчанию должна работать.
Если вы хотите, чтобы файлы были скрыты от пользователей, вы, вероятно, захотите поместить их в c: \ programdata. В этом случае при создании файлов защита по умолчанию, вероятно, неверна, поэтому вам нужно будет иметь ACL-файлы вашего приложения. Или лучше, возможно, чтобы ваша программа установки создала структуру каталогов для вашего приложения в каталоге c: \ programdata и установила, что программа установки установила хорошие ACL по умолчанию в каждом каталоге - тогда вашему приложению не придется жалеть о настройке ACL, когда она на самом деле создает файлы, он просто должен создавать файлы в нужном месте.
Во всех случаях вы должны вызвать соответствующую функцию Win32 (или .Net Framework), чтобы получить путь к каталогу c: \ programdata или c: \ users \ public. Не перекодируйте эти пути в своем приложении - если вы жестко указали, вы пропустите какой-то случай, когда пользователь переместил каталог или установил Windows каким-то необычным способом, и ваше приложение сломается.
Как я могу изменить разрешения программно? Возможно, с CACLS? IIRC, для которого требуются привилегии администратора. –
Создатель файла обычно имеет специальные привилегии. Мне удалось добавить разрешение записи для группы «Пользователи» в папке, созданной в c: \ ProgramData, без необходимости увеличения UAC. Прошло некоторое время с тех пор, как я сделал какое-либо программирование разрешений, хотя :( – crashmstr