Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 30.07.2018
Сообщений: 11

Обработка исключений

31.07.2018, 16:34. Показов 1846. Ответов 9

Студворк — интернет-сервис помощи студентам
Опять написал небольшую утилитку для работы с реестром Windows. Точнее программа удаляет некоторые разделы реестра, а потом их пустыми создает.
Проблема в том, что с этими разделами реестра может работать только пользователь с правами "Администратор", поэтому возникают множество исключений, если эта программа запускается из под обычного пользователя.
С моей стороны были сделаны обычные try_catch-блоки, которые без разбора просят пользователя запустить утилиту от имени Администратора.
Вопрос в том как корректно отловить эти исключения и написать пользователю понятные инструкции:
  1. раздела не существует, и у вас нет прав на его создание
  2. вы не можете удалить данную ветку реестра, так как у вас отсутствуют права на неё
  3. разделы реестра существуют и они пустые

Вот кусочек программы, где происходит всё действо
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
            RegistryKey regKey = Registry.LocalMachine;
            Boolean Success = true;
            try
            {
                
 
                regKey = regKey.CreateSubKey("Software\\Microsoft\\MSLicensing");
 
                if (regKey.OpenSubKey("HardwareID")!=null) regKey.DeleteSubKeyTree("HardwareID");
                if (regKey.OpenSubKey("Store") != null) regKey.DeleteSubKeyTree("Store");
                regKey.CreateSubKey("HardwareID");
                regKey.CreateSubKey("Store");
               
            }
            catch (ArgumentException e)
            {
 
                try
                {
                    regKey.CreateSubKey("HardwareID");
                    regKey.CreateSubKey("Store");
                    Success = true;
                }
                catch (Exception d)
                {
                    Success = false;
                    Console.WriteLine("Упс, что-то пошло не так");
                    Console.WriteLine("Придется внести изменения ручками");
                }
            }
            catch (UnauthorizedAccessException e)
            {
                //Console.WriteLine(e.HResult);
                //если нет прав доступа код -2147024891
                Success = false;
                Console.WriteLine("Запустите программу от имени администратора");
            }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.07.2018, 16:34
Ответы с готовыми решениями:

Обработка исключений
Здравствуйте. Мне поставлена задача - сделать математически простую программу (перевод одних единиц в другие), но с непробиваемой защитой...

Обработка исключений
С#. Как обработать исключительную ситуацию с извлечением числа из-под корня через try и catch

Обработка исключений
Господа, скажите пожалуйста, почему в этом коде try { a jo = new a(); ...

9
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
31.07.2018, 18:25
Лучший ответ Сообщение было отмечено Vitali_H как решение

Решение

запуск от админа
https://social.msdn.microsoft.... languageru

перед созданием/удалением/редактированием просто проверяйте существование и наличие прав.

для всего остального чекайте Exception.Message

и научитесь пользоватся гуглом
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18288 / 14211 / 5368
Регистрация: 17.03.2014
Сообщений: 28,889
Записей в блоге: 1
01.08.2018, 13:53
Лучший ответ Сообщение было отмечено Vitali_H как решение

Решение

Цитата Сообщение от Vitali_H Посмотреть сообщение
Точнее программа удаляет некоторые разделы реестра, а потом их пустыми создает.
Не советую так делать. Это может привести к потере разрешений. Лучше удалять содержимое не трогая сам ключ. Это будет чуть сложнее и дольше, но зато правильнее.
1
22 / 20 / 13
Регистрация: 19.07.2015
Сообщений: 99
01.08.2018, 15:42
В try-catch блоке вместо catch(Exception e) можете указывать конкретные типы исключений, например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
try
{
   ...
}
catch (NullReferenceException n)
{
   ...
}
catch (StackOverflowException s)
{
   ...
}
Таким образом вы сможете фильтровать ошибки и выбирать поведение программы в соответствии с типом ошибки.
0
0 / 0 / 0
Регистрация: 30.07.2018
Сообщений: 11
01.08.2018, 17:08  [ТС]
OwenGlendower, спасибо, теперь понятно, почему у меня программа в домене не отрабатывала (а в рабочей группе работала). Погуглю на удаление содержимого, а не самого ключа.

Wolfdp то же полезная информация, обязательно добавлю манифест, нужная штука.
0
01.08.2018, 17:17

Не по теме:

ByMedion, к слову, исключение StackOverflowException не перехватывается.

0
0 / 0 / 0
Регистрация: 30.07.2018
Сообщений: 11
01.08.2018, 17:28  [ТС]
Usaga четно сказать, это исключение мне и не нужно, нужны эти
Цитата Сообщение от Vitali_H Посмотреть сообщение
вы не можете удалить данную ветку реестра, так как у вас отсутствуют права на неё
разделы реестра существуют и они пустые
первый пункт отпадает, так как добавлю манифест.
0
22 / 20 / 13
Регистрация: 19.07.2015
Сообщений: 99
01.08.2018, 20:50
Цитата Сообщение от Usaga Посмотреть сообщение
Не по теме:
ByMedion, к слову, исключение StackOverflowException не перехватывается.
Упс, прошу прощения) Я просто для примера написал.
0
0 / 0 / 0
Регистрация: 30.07.2018
Сообщений: 11
01.08.2018, 20:57  [ТС]
Usaga а стоит исключение StackOverflowException вообще перехватывать? оно на практике хоть кому-то пригодилось?
0
22 / 20 / 13
Регистрация: 19.07.2015
Сообщений: 99
01.08.2018, 21:11
Vitali_H, на практике его не перехватишь никак, приложение просто упадет и все тут.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.08.2018, 21:11
Помогаю со студенческими работами здесь

Обработка исключений
Хочу создать исключение,чтобы выдавал ошибку ,если пользователь не ввел данные. Подскажите,что не так? for (int i = 0; i < 5; i++) ...

Обработка исключений
Подскажите как обрабатывать исключение пока оно не исчезнет. Например: System.IO.Ports.SerialPort rs_port; ...

Обработка исключений
Здравствуйте! Такая проблема, что надо сделать обработку исключений, если пользователь вместо цифры введет букву в textBox. Практически все...

Обработка исключений
подскажите почему не выводится на экран? Console.Write("Введите 1 для повтора ввода"); res =...

Обработка исключений
не понимаю почему не хочет заносить в массив mas_a=0 при срабатывании исключения Exception Мне нужно чтобы при возникновении исключения...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru