Упаковка используемых dll в exe
Пишу утилитку, использующую функции AutoItX3.dll и Interop.AutoItX3Lib.dll. Т.к AutoItX3.dll есть х64 и х86, то чтобы не путаться самому и не путать пользователя, необходимо эти dll упаковать в exe, а при необходимости загружать в память (без выгрузки на диск).
Пытался добавить эти библиотеки в проект с флагом Build Action = Embedded Resource, в результате размер exe-шника вырос в соответствии с размерами библиотек, но когда дело доходит до вызова функций AutoItX3, вылетает ошибка System.IO.FileNotFoundException. Interop.AutoItX3Lib.dll используется как референс. Собственно вопрос - как упаковать эти библиотеки, чтобы оно работало? |
Что, никто не знает? :)
|
Flammable, к сожалению, никто...
У меня возникло несколько вопросов: 1) так ли необходимо таскать обе библиотеки в экзешнике? а если попробовать их сопуствующими файлами загружать динамически (в зависимости от ситуации), а ещё лучше указать в манифесте, какую библиотеку должен замапировать в адресное пространство загрузчик 2) я так понимаю что вы используете статическое линкование (с тонкостями с# не знаком), а вызывать их пробуете динамически |
Цитата:
По этой же причине я компилирую солюшн без манифеста. 2. Я добавляю референс AutoItX3Lib (Interop.AutoItX3Lib.dll) и вызываю его методы. |
Flammable, я бы делал так: распаковывал нужную либу из ресурсов во временную директорию, далее подгружал её с помощью LoadLibrary, находил адрес нужной функции через GetProcAddress и далее работал бы с этим делом.Это на мой взгляд наиболее человечный вариант, если вы хотите, чтобы либы находились в ресурсах.Как это всё будет выглядеть в ДоДиезе, я понятия не имею.
Цитата:
|
что-то туплю я... экзешник полностью в память загружается/маппируется или нет?
а если собрать 2 версии (32 и 64) со статической линковкой и инсталлятором? код то 64 и 32 всё равно различается |
Сам разобрался. Если кому интересно - ищите утилиту IL Merge.
|
Flammable, А ссылку скинуть влом?
|
Время: 13:47. |
Время: 13:47.
© OSzone.net 2001-