UnauthorizedAccessException при попытке записи в текстовый файл на С#

Я пытаюсь написать пустой текстовый файл, который включен в мой установщик, но я получаю следующую ошибку:

System.UnauthorizedAccessException: Access to the path 'C:\Program Files (x86)\Hex Technologies\wamplocation.txt' is denied.

Кажется, это права доступа к файлу после его установки через мой установщик, но как я могу сделать файл полностью изменяемым после установки файла?! Можно ли это сделать через С#?!

ОТРЕДАКТИРОВАНО;

           wamp_url = openFileDialog1.FileName.ToString();
           String EnviromentPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
           StreamWriter outfile = new StreamWriter(EnviromentPath + @"\Hex Technologies\wamplocation.txt");
           outfile.Write(wamp_url);
           outfile.Close();

person r0bb077    schedule 12.03.2012    source источник
comment
Windows 7 ?, если это так, вы должны писать в ProgramData, а не в Program Files   -  person Mark Hall    schedule 13.03.2012


Ответы (2)


Вы не должны хранить изменяемые файлы данных в папке Program Files. Используйте Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) или Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

Путь Program Files\... защищен от изменения обычными пользователями Win7+. Было бы плохой идеей пытаться обойти эту защиту.

person Sam Axe    schedule 12.03.2012
comment
Спасибо, я получаю еще одну ошибку, см. мой комментарий ниже, не могли бы вы помочь? - person r0bb077; 13.03.2012

Вероятнее всего, UAC мешает вам.

В идеале ваша программа не должна записывать в это место, если этот файл модификации должен быть изменен во время процесса установки, и больше нигде вам не нужно убедиться, что вы работаете с повышенными правами.

Если этот файл необходимо изменить во время выполнения, следует рассмотреть возможность использования либо %appdata% для пользовательских данных, либо %programdata% для данных программы вместо программных файлов.

person Bob Vale    schedule 12.03.2012
comment
Спасибо, но теперь я получаю сообщение о том, что «файл используется другим процессом». Я вставил свой код выше, чтобы показать, как выглядит мой код! - person r0bb077; 13.03.2012
comment
существует ли папка Hex Technologies в данных приложения? - person Bob Vale; 13.03.2012
comment
Да, я дважды проверил строку, которую ввел в стример, и она совпадает с URL-адресом файла .txt. - person r0bb077; 13.03.2012
comment
загрузите дескриптор, запустите его, чтобы узнать, какой процесс заблокировал ваш файл - person Bob Vale; 13.03.2012
comment
Я запускаю technet.microsoft.com/en-us/sysinternals/bb896653 и ничего не появилось для txt файла?! - person r0bb077; 13.03.2012