C:\ProgramData
имеет параметры безопасности, которые не позволяют стандартным пользователям писать там. Это не нова в Windows 8
, Windows 7
была такой же, и аналогичная папка на Vista
также защищена таким образом. Возможно, ваша среда Windows 7
UAC не отключена, или, возможно, у вас есть C:\ProgramData
или C:\ProgramData\MyProgramName
, чтобы разрешить доступ на запись для обычного пользователя.
Somethings вы должны кое-что о UAC
Когда Microsoft представила UAC им нужен способ для более старые приложения, чтобы продолжить работу, по крайней мере на некоторое время. То, что они придумали, было «Виртуализация файлов и реестров», где устаревшие приложения, которые пытались получить доступ (сейчас -) verboten Системные папки или записи реестра будут перенаправлены на их собственную «виртуализированную» копию этих ресурсов для каждого пользователя. Как статья Википедии на UAC.
Чтобы выразить это бесплатно, ProgramData содержит данные приложения, которое не относится к пользователю. Эти данные будут доступны всем пользователям на компьютере.
Существует несколько подходов к использованию этой папки. Некоторые приложения пишут там только во время установки, пока процесс установки работает повышенным образом. Тогда само приложение, которое работает как стандартный пользователь, может читать, но никогда не пытается писать.
Другой подход заключается в том, чтобы установщик создал подпапку C: \ ProgramData, которая была защищена, чтобы разрешить доступ на запись для стандартного пользователя или любого другого пользователя/группы, которую разработчик считает подходящим.
Если у вас есть привилегии «Запуск от имени администратора», вы сможете избежать этой проблемы.
Возможно, авторитет письма не является. проверьте свойство 'c: \ ProgramData' -> вкладка безопасности ->« Пользователи »(или другие). также используйте консоль администрирования. – BLUEPIXY
Вместо этого вы можете попытаться использовать MoveFile() и проверить GetLastError(), чтобы определить ошибку. –
Почему вы ожидаете, что это будет вести себя так или иначе? Ни документация C, ни документация Windows не говорят, что именно должно произойти в этом случае. –