Об этом есть сообщение в блоге: 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, и ваше приложение сломается.