Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Упаковка используемых dll в exe

Ответить
Настройки темы
.NET - Упаковка используемых dll в exe

Старожил


Сообщения: 191
Благодарности: 5


Конфигурация

Профиль | Отправить PM | Цитировать


Пишу утилитку, использующую функции AutoItX3.dll и Interop.AutoItX3Lib.dll. Т.к AutoItX3.dll есть х64 и х86, то чтобы не путаться самому и не путать пользователя, необходимо эти dll упаковать в exe, а при необходимости загружать в память (без выгрузки на диск).
Пытался добавить эти библиотеки в проект с флагом Build Action = Embedded Resource, в результате размер exe-шника вырос в соответствии с размерами библиотек, но когда дело доходит до вызова функций AutoItX3, вылетает ошибка System.IO.FileNotFoundException. Interop.AutoItX3Lib.dll используется как референс.
Собственно вопрос - как упаковать эти библиотеки, чтобы оно работало?

-------
Ясность - одна из форм полного тумана.


Отправлено: 14:49, 05-03-2010

 

Старожил


Сообщения: 191
Благодарности: 5

Профиль | Отправить PM | Цитировать


Что, никто не знает?

-------
Ясность - одна из форм полного тумана.


Отправлено: 13:20, 08-03-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Flammable, к сожалению, никто...
У меня возникло несколько вопросов:
1) так ли необходимо таскать обе библиотеки в экзешнике? а если попробовать их сопуствующими файлами загружать динамически (в зависимости от ситуации), а ещё лучше указать в манифесте, какую библиотеку должен замапировать в адресное пространство загрузчик
2) я так понимаю что вы используете статическое линкование (с тонкостями с# не знаком), а вызывать их пробуете динамически

Отправлено: 22:05, 08-03-2010 | #3


Старожил


Сообщения: 191
Благодарности: 5

Профиль | Отправить PM | Цитировать


Цитата pva:
ак ли необходимо таскать обе библиотеки в экзешнике? а если попробовать их сопуствующими файлами загружать динамически (в зависимости от ситуации), а ещё лучше указать в манифесте, какую библиотеку должен замапировать в адресное пространство загрузчик »
Неудобно. Библиотека AutoItX3 распространяется в двух версиях - х64 и х86. Они невзаивозаменяемы. Чтобы уменьшить количество файлов в сборке (оставить только .exe и .cfg), нужно упаковать две библиотеки внутрь.
По этой же причине я компилирую солюшн без манифеста.

2. Я добавляю референс AutoItX3Lib (Interop.AutoItX3Lib.dll) и вызываю его методы.

-------
Ясность - одна из форм полного тумана.


Отправлено: 22:33, 08-03-2010 | #4


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Flammable, я бы делал так: распаковывал нужную либу из ресурсов во временную директорию, далее подгружал её с помощью LoadLibrary, находил адрес нужной функции через GetProcAddress и далее работал бы с этим делом.Это на мой взгляд наиболее человечный вариант, если вы хотите, чтобы либы находились в ресурсах.Как это всё будет выглядеть в ДоДиезе, я понятия не имею.
Цитата Flammable:
а при необходимости загружать в память (без выгрузки на диск) »
...такое возможно,но это сложнее в виду того,что вам придётся самому настраивать релоки в либе.Этот способ описан Ms-Rem'ом в его статье про внедрение своего кода в чужой процесс - ТУТ - вам это совершенно ни к чему.

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:41, 09-03-2010 | #5

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


что-то туплю я... экзешник полностью в память загружается/маппируется или нет?
а если собрать 2 версии (32 и 64) со статической линковкой и инсталлятором? код то 64 и 32 всё равно различается

Отправлено: 08:07, 09-03-2010 | #6


Старожил


Сообщения: 191
Благодарности: 5

Профиль | Отправить PM | Цитировать


Сам разобрался. Если кому интересно - ищите утилиту IL Merge.

-------
Ясность - одна из форм полного тумана.


Отправлено: 19:16, 12-08-2010 | #7


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Flammable, А ссылку скинуть влом?

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:35, 12-08-2010 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Упаковка используемых dll в exe

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Ошибка - Не запускается explorer.exe из-за пропажи WININET.dll l1nker Microsoft Windows 2000/XP 4 05-08-2009 12:04
Разное - Использование команд из user.exe(dll) n9271217 Microsoft Windows 2000/XP 0 13-01-2009 14:58
Не опознается hal.dll,ntoskrnl.exe,KDCOM.DLL Igor_strelka Microsoft Windows 2000/XP 3 12-01-2007 23:23
Pascal exe и С++ dll Server Программирование и базы данных 6 25-09-2006 11:48
Написание упаковщика exe, dll на c++ Builder DIMAIN Программирование и базы данных 4 30-04-2005 23:44




 
Переход