@EvilROMA

Что необходимо сделать при ошибке System.UnauthorizedAccessException: Отказано в доступе по пути. C# WinForms?

Написал рабочую программу, преобразовал её к виду WinForms. В ней учтена простая система регистрации, где необходим файл с нужными данными - логин и пароль. Через проект SetupProject создал необходимую программу-установщик для своей программы. До этого без установщика всё работало прекрасно и слажено, никаких ошибок программа не вызывала. После того, как я установил свою программу и попытался зарегистрироваться, выходит такая ошибка: System.UnauthorizedAccessException: Отказано в доступе по пути "C:\Program Files (x86)\Default Company Name\Lagrange Setup\users.txt". users.txt - файл с данными о пользователях. Причём одна и та же ошибка возникает и при регистрации, и при авторизации. Вот полный код регистрации:
private void button7_Click(object sender, EventArgs e)
        {
            if (textBox7.Text != textBox8.Text) { MessageBox.Show("Пароли не совпадают! \n Повторите правильность ввода пароля!"); return; }
            if (textBox6.Text == "" || textBox7.Text == "" || textBox8.Text == "") { MessageBox.Show("Необходимо заполнить все поля"); return; }
            if (!File.Exists("users.txt")) { File.Create("users.txt").Close(); }

            string Login = textBox6.Text;
            int Pswrd = textBox7.Text.GetHashCode();

            //Проверка на наличие зарегистрированного пользователя
            StreamReader sr = new StreamReader("users.txt");
            string Enter = Login;
            Regex reg = new Regex(Enter);
            bool NoRepeat = true;
            string str = sr.ReadLine();
            while (str != null)
            {
                if (reg.IsMatch(str))
                {
                    MessageBox.Show("Пользователь с именем " + Login + " уже существует!");
                    NoRepeat = false;
                    break;
                }
                str = sr.ReadLine();
            }
            sr.Close();
            //Добавление нового пользователя в базу данных
            if (NoRepeat)
            {
                int Dlina = File.ReadAllLines("users.txt").Length;
                StreamWriter sw = new StreamWriter("users.txt", true);
                sw.WriteLine(Dlina + " " + Login + " " + Pswrd);
                sw.Close();
                user = true; button4.Enabled = true; button5.Enabled = true;
                MessageBox.Show("Регистрация прошла успешно");
            }
        }
        //Класс авторизации
        private void button8_Click(object sender, EventArgs e)
        {
            //Авторизация пользователя
            string Login = textBox9.Text;
            int Pswrd = textBox10.Text.GetHashCode();
            if (textBox9.Text == "" || textBox10.Text == "")
            {
                MessageBox.Show("Необходимо заполнить все поля");
                return;
            }
            //Если нет файла базы данных
            if (!File.Exists("users.txt"))
                File.Create("users.txt").Close();
            StreamReader sr = new StreamReader("users.txt");
            string Enter = Login + " " + Pswrd.GetHashCode();
            Regex reg = new Regex(Enter);

            //Нахождение пользователя в базе данных - текстовом файле
            string str = sr.ReadLine();
            while (str != null)
            {
                if (reg.IsMatch(str))
                {
                    MessageBox.Show("Авторизация выполнена!\n" + "Добро пожаловать, " + Login + "!");
                    user = true;
                    tableLayoutPanel6.Visible = false;

                    tableLayoutPanel1.Visible = true;
                    tableLayoutPanel2.Visible = true;
                    tableLayoutPanel3.Visible = true;
                    tableLayoutPanel4.Visible = true;
                    toolStrip1.Visible = true;
                    textBox9.Text = "";
                    textBox10.Text = "";
                    break;
                }
                str = sr.ReadLine();
            }
            sr.Close();
        }

Сведущим просьба помочь разобраться в проблеме и наставить на путь истинный.
  • Вопрос задан
  • 47 просмотров
Решения вопроса 1
Обычно в Program Files имеет право писать только админ. Либо запускайте ваше приложение от имени админа (что в данном случае избыточно), либо храните данные в доступном для записи обычному пользователю месте (К примеру в C:\Users\ИмяЮзера\AppData\Local\имя_Вашего_ПО).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Senior .NET developer
Как всегда не удосужились прочитать рекомендации производителя.
Итак если коротко. Ваша программа может читать настройки из своей папки. Писать может только в хитромудреную папку но там сам фреймворк разбирается.
также нужно использовать system.Envinment для получения необходимых путей, там же описано куда можно писать, для получения ачивки windows 10 compatibility
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы