Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
yarkov_aleksei
0 / 0 / 3
Регистрация: 24.05.2012
Сообщений: 93
1

Как выгрузить из памяти dll

07.10.2014, 19:27. Просмотров 2791. Ответов 5
Метки нет (Все метки)

Пишу программу с поддержкой плагинов в виде 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
public void InstallPlugin(string plPath)
{
    // загружаем в память dll
    Assembly asm = Assembly.LoadFrom(plPath);
    // перебираем свойства загруженного плагина
        foreach (Type t in asm.GetExportedTypes())
        {                   
                // если он содержит необходимые свойства, то признаем его плагином
                if (typeof(IPlugin).IsAssignableFrom(t))
                {                       
                    IPlugin pi = (IPlugin)asm.CreateInstance(t.FullName);
                    // если в словаре плагинов нет ключа с таким именем 
                    if(plugins.ContainsKey(pi.GetName()) == false)
                    {
                        // то добавим его
                        plugins.Add(pi.GetName(), pi);
                    }
                    // иначе
                    else
                    {
                        // предупредим пользователя об этом
                        MessageBox.Show("Плагин " + pi.GetName() + "\r\nПуть: " + pi.GetDllPath() + "\r\nуже установлен и загружен в программу. Избегайте дублирования плагинов!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        // и удалим только что скопированный в папку плагинов dll файл
                        File.Delete(plPath);
                        // выгружаем из памяти
                        // ??????????????????????????7
                    }
                }
          }  
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2014, 19:27
Ответы с готовыми решениями:

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

Как защитить Dll от редакторов памяти?
Всем привет, у меня есть dll мне нужно защитить данную dll от редакторов памяти таких как...

VAMemory.dll для чтения адреса из памяти процесса: как перевести string в IntPtr
Доброй ночи. использую VAMemory.dll для чтения адреса из памяти процесса. IntPtr scurz =...

Как выгрузить dll-ку из памяти?
Вопрос может не к этому форуму, но все равно спрошу. Делаю на delphi ActiveX-кую ddl-ку для ASP....

Как выгрузить DLL?
Люди помогите выгрузить dll из памяти , любым способом но чтоб dll была 100% выгружена из памяти,...

5
meksik
202 / 171 / 67
Регистрация: 04.10.2014
Сообщений: 839
07.10.2014, 19:56 2
C#
1
asm = null
о_О
0
yarkov_aleksei
0 / 0 / 3
Регистрация: 24.05.2012
Сообщений: 93
07.10.2014, 20:08  [ТС] 3
Цитата Сообщение от meksik Посмотреть сообщение
о_О
Учусь )))) Спасибо ))
0
Mikant
1297 / 970 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
07.10.2014, 23:15 4
Цитата Сообщение от meksik Посмотреть сообщение
asm = null
угумс.. 10 раз..

Цитата Сообщение от yarkov_aleksei Посмотреть сообщение
Но нужно же еще и выгрузить ее из памяти
цитирую с MSDN:
Отдельную сборку нельзя выгрузить, не выгрузив все домены приложений, в которых она содержится. Используйте метод Unload из AppDomain для выгрузки доменов приложений. Для получения дополнительной информации см. Практическое руководство. Выгрузка домена приложения.
Ну или, что проще, так это перед загрузкой сборки (Assembly.LoadFrom) (да и вообще перед всеми копированиями в папки) проверять наличие в ней плагинов (IPlugin), загрузив её только для поддержки интроспекции: Assembly.ReflectionOnlyLoadFrom
0
meksik
07.10.2014, 23:30
  #5

Не по теме:

Mikant, я сделал предположение просто :)

0
yarkov_aleksei
0 / 0 / 3
Регистрация: 24.05.2012
Сообщений: 93
09.10.2014, 17:31  [ТС] 6
Это издевательство какое-то. В SharpDevelop код приведенный выше отлично работает. Поставил себе Visual Studio 2013 Ultimate. Собираю решение, а оно мне вот что пишет.
Что происходит?
0
Миниатюры
Как выгрузить из памяти dll  
09.10.2014, 17:31
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2014, 17:31

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как выгрузить Excel из памяти?
После работы с Excel и закрытия через VB он почему то остается в памяти и для открытия екселевского...

Как выгрузить dll из ресурсов рядом с программой?
Есть 3 dll в ресурсах . connect.dll syq.dll nitk.dll Нужно их выгрузить рядом с программой,а...

Как выгрузить из памяти свою программу?
При выгрузке программы она остается в списке процессов,как убить её совсем?


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

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

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