Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
master_fatum
0 / 0 / 0
Регистрация: 26.02.2015
Сообщений: 92
1

Ошибка подключения DLL

02.11.2016, 22:51. Просмотров 196. Ответов 1
Метки нет (Все метки)

Друзья, доброго времени суток! Помогите пожалуйста разобраться с одной траблой! В папке с проектом лежит DLL. Понятно что если нет её там, то вылетит Эксепшн. Ексепшн обработал так, что вылетает сообщение с диалоговым окном выбора файла DLL. Так вот.... Если я подсовываю нужный DLL с первого раза, то всё гуд, подгружается. Если я до этого подсуну левую DLL он ругнётся что DLL не та, а после этого я тут же подсовываю нужную DLL, он всё равно ругается, что DLL не верная! С первого раза всё гуд! Ниже код!

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
private void btn_sql_Click(object sender, EventArgs e)
        {
            try
            {
                formSql = new FormSqlAttack();
                formSql.ShowDialog();
            }
            catch (Exception)
            {
 
                DialogResult result = MessageBox.Show(@"Не найдена динамическая библиотека SQL.dll." + Environment.NewLine + @"Подключить необходимую библиотеку сейчас?", @"Ошибка", MessageBoxButtons.YesNo, MessageBoxIcon.Warning );
 
                if (result == DialogResult.Yes)
                {
                    try
                    {
                        openFile = new OpenFileDialog();
                        openFile.Filter = @"DLLs Files (*.dll)|*.dll";
                        openFile.ShowDialog();
                        string pathFile = openFile.FileName;
                        string pathDirectory = Environment.CurrentDirectory;
 
                        if (!File.Exists(pathDirectory + "\\SQL.dll"))
                        {
                            File.Copy(pathFile, pathDirectory + "\\SQL.dll");
 
                            try
                            {
                                Assembly assembly = Assembly.LoadFrom(pathDirectory + "\\SQL.dll"); 
                               //Тут я подгружаю сборку. С первого раза гуд, но если я до этого суну левую, вылетает Эксепшн                     ниже, потом сразу return. Тут же подсовываю нормальную сборку, опять Эксепшн который ниже сразу. Повторю, что если я с первого раза подсовываю нужную сборку, всё гуд подружает!
                            }
                            catch (Exception)
                            {
 
                                MessageBox.Show(@"Неверная библиотека! Библиотека не установлена!", "", MessageBoxButtons.OK,             MessageBoxIcon.Error);
                                File.Delete(pathDirectory + "\\SQL.dll");
                                return;
                            }
                            
                            formSqlAttack = new FormSqlAttack();
 
                            if (formSqlAttack != null)
                            {
                                MessageBox.Show(@"Библиотека успешно установлена!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                            else
                            {
                                MessageBox.Show(@"Неверная библиотека! Библиотека не установлена!", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                        }
                        else
                        {
                            MessageBox.Show(@"Данная библиотека уже установлена или файл библиотеки существует!");
                        }
                    }
                    catch (Exception)
                    {
                        
                    }                   
                    
                }
            }
        }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2016, 22:51
Ответы с готовыми решениями:

Как отловить исключение ошибки подключения DLL
Как отловить исключение ошибки подключения DLL Использую using...

Ошибка подключения к Mysql
Пишу программу , где должно происходить подключение к мускулу и передача с...

Ошибка подключения к БД SQL
Пытаюсь в проекте C# WinForms подключиться к БД SQL , выходит ошибка как на...

создание dll для подключения к бд oracle
Пытаюсь вынести подключение к бд oracle в dll. Подскажите, пожалуйста, как...

Spell Checker ошибка: Word cannot find the spelling file mssp3RU.dll or mssp232.dll for Russian (Russia).
object nothing = Missing.Value; Pitayus ispolzivat Spell Checker Word-a ...

1
ViterAlex
6822 / 3797 / 1552
Регистрация: 11.02.2013
Сообщений: 8,343
Завершенные тесты: 3
03.11.2016, 00:51 2
master_fatum, ты неверно подходишь к проблеме. Для разрешения ситуаций, связанных с загрузкой библиотек в рантайме нужно использовать AppDomain.CurrentDomain.AssemblyResolve — событие, возникающие при невозможности загрузить библиотеку.
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
static void Main()
{
    AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}
 
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    var msgResult = MessageBox.Show($"Невозможно найти библиотеку {args.Name}.\nХотите указать её расположение?", "Отсутствует библиотека",
        MessageBoxButtons.YesNo, MessageBoxIcon.Error);
    if (msgResult == DialogResult.No)
    {
        Application.Exit();
    }
    using (var dialog = new OpenFileDialog())
    {
        while (true)
        {
            dialog.Title = "Выберите файл библиотеки";
            dialog.Filter = "Библиотеки dll|*.dll";
            if (dialog.ShowDialog() != DialogResult.OK)
            {
                Application.Exit();
            }
            //требуемая библиотека
            var requiredAssembly = new AssemblyName(args.Name);
            //выбранная библиотека
            var selectedAssembly = Assembly.LoadFile(dialog.FileName);
            if (selectedAssembly.GetName().FullName.Equals(requiredAssembly.FullName))
            {
                File.Copy(dialog.FileName, Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Path.GetFileName(dialog.FileName)));
                return selectedAssembly;
            }
            msgResult = MessageBox.Show($"Выбранная библиотека {selectedAssembly.FullName} не подходит.\nХотите выбрать другую?", "Отсутствует библиотека",
        MessageBoxButtons.YesNo, MessageBoxIcon.Error);
            if (msgResult == DialogResult.No)
            {
                Application.Exit();
            }
        }
    }
}
Вот так будет выводиться диалог выбора библиотеки, пока пользователь не нажмёт «Нет» или «Отмена» в диалоге.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2016, 00:51

Socket - ы. Ошибка подключения 10061
Доброго времени суток! Начал использовать Socket-ы, при попытке создать...

Ошибка при вызове метода dll
Есть dll, в которой определен метод с такой сигнатурой: public static...

Ошибка при использовании DLL, написанной на VBA
Добрый день Подскажите пожалуйста. Я пытаюсь вызвать метод класса...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru