Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 13.03.2017
Сообщений: 6
.NET 4.x

UnauthorizedAccessException при удалении файла

13.03.2017, 16:27. Показов 1044. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть некий код (приведенный ниже), который делает обновление приложения. На некоторых машинах, при автоматическом перезапуске не удаляется "бэкап" и приложение ловит UnauthorizedAccessException, при этом если тут же закрыть и запустить заново, файл "бэкапа" удаляется без ошибок.
Помогите отыскать, причину "эксепшена", я так понимаю проблема с правами пользователя от имени которого запущено приложение, но в "интернетах" не нашел ничего "путнего", все только про атрибуты файлов пишут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
        public static void GetNewVersion()
        {
            try
            {
                //выбираем фтп сервер
                Updater.CheckFTP();
                //путь к бэкапу
                var backup = Path.Combine(Directory.GetCurrentDirectory(), "CDR.exe.bak");
                //для отладки
                test = backup.ToString();
                //Если файл бэкапа есть
                if (File.Exists(backup))
                {
                    //Нормализуем атрибуты файла
                    File.SetAttributes(backup, FileAttributes.Normal);
                    //удаляем
                    File.Delete(backup);
                }
                //получаем текущую версию приложения
                Updater.versionNow = Assembly.GetExecutingAssembly().GetName().Version;
                //получаем версию на сервере
                Updater.versionOnServer = new Version(Updater.GetVersionFTP());
                // сравниваем
                int num = Updater.versionNow.CompareTo(Updater.versionOnServer);
                //если текущая меньше серверной
                if (num < 0)
                {
                    //выводим сообщение о новой версии
                    MessageBox.Show("Обнаружена новая версия. \n\rСкачивание и перезапуск программы выполнится автоматически", "Текущая версия " + Updater.versionNow.ToString() + " / Версия на сервере " + Updater.versionOnServer.ToString());
                    //Создаем бэкап программы
                    File.Move(Application.ExecutablePath, "CDR.exe.bak");
                    //Скачиваем новую версию с фтп
                    Updater.DownloadFileFTP();
                    //Если hash скачаного файла и файла на сервере совпадают, перезапускаем приложение
                    if (Updater.ComputeMD5Checksum(Application.ExecutablePath) == Updater.md5)
                    {
                        Application.Restart();
                    }
                    // если hash не совпадает, скачивание было неполным
                    else
                    {
                        File.SetAttributes(Application.ExecutablePath, FileAttributes.Normal);
                        //Удаляем скачаный файл
                        File.Delete(Application.ExecutablePath);
                        //Восстанавливаем из бэкап
                        File.Move(Path.Combine(Directory.GetCurrentDirectory(), "CDR.exe.bak"), "CDR.exe");
                        if (MessageBox.Show("Повторить попытку?", "Неудача загрузки обновления", MessageBoxButtons.OKCancel) == DialogResult.OK)
                            Updater.GetNewVersion();
                    }
                }
            }
            catch (UnauthorizedAccessException e)
            {
                //var errorLog = Path.Combine(Directory.GetCurrentDirectory(), "errorBackup.log");
                //if (!File.Exists(errorLog))
                //{
                    
                //    using (StreamWriter sw = File.CreateText(errorLog))
                //    {
 
                //        sw.WriteLine(e.StackTrace);
                //        sw.WriteLine(e.Message);
                //        sw.WriteLine(e.Data);
                //        sw.WriteLine(File.GetAttributes(test).ToString());
                //        sw.Close();
                //    }
                //}
                MessageBox.Show("К сожалению не получилось получить права, для удяления backup программы \n\rпросто перезапустите программу\n\r");
                Environment.Exit(-1);
            }
            catch { }
        }
Добавлено через 38 минут
C#
1
2
3
4
5
6
 в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   в System.IO.File.InternalDelete(String path, Boolean checkHost)
   в System.IO.File.Delete(String path)
   в CDR.Updater.GetNewVersion()
Отказано в доступе по пути "C:\Users\user\Desktop\CDR.exe.bak".
System.Collections.ListDictionaryInternal
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.03.2017, 16:27
Ответы с готовыми решениями:

Исключение при записи в файл: UnauthorizedAccessException
На следующий код выдает это исключение. В чем проблема, как мне записать в файл то?) FileStream fs1 = new...

При удалении строк Repeater не обновляется
Страница состоит из 2 PlaceHolderov в которые загружаются юсер контролы 1-загружено меню которое редактируется, но при удалении в нем...

Подтверждение при удалении строки из datagrid
как это осуществить?

2
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
14.03.2017, 12:02
vip12, ну так может файл открыт в момент попытки удаления?
0
0 / 0 / 0
Регистрация: 13.03.2017
Сообщений: 6
14.03.2017, 12:11  [ТС]
бэкап не открывается, мы его только что скопировали и положили рядом, и если файл открыт, при удалении будет другой эксепшн IOException
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.03.2017, 12:11
Помогаю со студенческими работами здесь

Смешение позиций кнопок, при удалении одной из них(как TabPage)
Динамически создаю набор кнопок: x++;//при создании новой кнопки растет(при объявлении int x=0) button3User = new Button(); ...

Класс DirectoryInfo, метод GetFiles, и исключение UnauthorizedAccessException
В своей программе я использую такой метод: DirectoryInfo dir = new DirectoryInfo(path); var files =...

При удалении или переименовании вкладки браузера возникает ошибка ссылки на объект
Пишу веб-браузер на C#, при работе с закладками столкнулся с проблемой, в удалении и смене имени (использую xml). С самими закладками все...

Ошибка при удалении записи с БД
Добрый день! Есть метод удаления записи с БД. private void btn_deleteBook_Click(object sender, EventArgs e) { ...

ошибка при удалении записей из бд
при удалении данных выскакивает ошибка: Удаление или изменение записи невозможно. В таблице &quot;Аудитории&quot; имеются связанные записи....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru