У меня есть некоторый код, который читает файл конфигурации, но когда я открываю файл в TextPad, я вижу различные значения, чем мое приложение. Я проверил его с Блокнотом. Блокнот соглашается с моим приложением, TextPad показывает что-то еще.
Это находится на Бизнесе Vista x64.
Какая-либо идея, что могло вызывать это? Я заглянул Context Menu->Properties->Previous Versions
детали, но это говорит, что "Нет никаких предыдущих доступных версий".
Меня попросили примера, вот шаги для тиражирования (я не могу заставить его произойти надежно):
Блокнот
Не может создать C:\Program Files (x86)\Daniel Schaffer\WorkingOn for FogBugz\FogBugz> файл WorkingOn.exe.config.
Удостоверьтесь, что путь и имя файла корректны.
Я не могу поместить содержание здесь, поскольку это - XML и кодируется Superuser.com, но здесь является ссылкой на скринкаст: http://screencast.com/t/zhERl7mocp4.
Вы, вероятно, сталкиваетесь с частью функций UAC Vista под названием Виртуальное Хранилище. Вот отрывок от статьи:
Когда приложение пишет в системное местоположение, только записываемое администраторами, Windows затем пишет все последующие операции файла в определенный для пользователя путь в соответствии с каталогом Virtual Store, который расположен в %LOCALAPPDATA %\VirtualStore. Позже, когда приложение читает назад этот файл, компьютер обеспечит тот в Виртуальном Хранилище. Поскольку инфраструктура безопасности Windows обрабатывает виртуализацию без помощи приложения, приложение полагает, что смогло успешно читать и записать непосредственно в Программные файлы. Прозрачность виртуализации файла позволяет приложениям чувствовать, что они пишут и читают из защищенного ресурса, когда на самом деле они получают доступ к виртуализированной версии.
Ваше приложение выполняет в неподнятом (неадминистратор) контекст. Таким образом, когда это пытается открыть файл в папке Program Files, тот запрос становится перенаправленным к Вашим учетным записям пользователей Виртуальное местоположение Хранилища прозрачно. Ваша копия TextPad, вероятно, работает в поднятом контексте и таким образом, это видит файл, который живет в реальной папке Program Files.
Если это - Ваш код, из которого можно изменить функциональность, и Вы хотите, чтобы пользователи смогли использовать его, не работая как администратор, необходимо изменить местоположение того, где Вы храните свои файлы конфигурации к где-нибудь в папке ApplicationData пользователя, где это принадлежит. Записи настроек к файлу конфигурации, сохраненному в папке установки приложения, высоко препятствуют в эти дни. Если у Вас действительно есть настройки, которые должны относиться ко всем пользователям на машине, необходимо записать им в папку All Users Application Data вместо этого. И даже затем, необходимо будет все еще запустить приложение в Поднятом контексте по умолчанию, если Вы явно не предоставляете доступ для записи Группы пользователей к своей папке.
Просто сохраните эту молитву, входящую в Вашу голову, поскольку Вы пишете программное обеспечение для Vista и вне. "Пользователи могут только записать в свой профиль... Пользователи могут только записать в свой профиль"
Причина, почему Блокнот не может создать файл, состоит в том, что другой процесс блокирует его. Начиная с содержания изменений файла мое предположение было бы то, что приложение пишет файл при рассмотрении его.