Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > создание автономного exe'шника


Автор: Zyxel 26.8.2011, 18:33
Есть проект, поддерживющий работу с большим количеством устройств. В папке с exe'шником проекта находятся dll'ки - драйвера 
устройств. Помимо того, что это просто неудобно, при переносе на др. компы возникают еще и проблемы со студийными библиотеками типа msvcr*.dll
Работаю c VC++ 2005.
Подскажите,  как сделать, чтобы exe файл проекта был автономен и не требовал наличия  dll в своем каталоге?

ну...что-то типа этого... 
http://fallengamer.livejournal.com/69536.html
 вроде то, что нужно, но ничего не понятно

Автор: kiler4747 26.8.2011, 21:22
Создай инсталлер. В студии при выборе типа проекта выбрать Другой тип проекта, а там установка. (VC++2010)

Автор: Zyxel 26.8.2011, 22:05
Если правильно понимаю, инсталлер просто установит exe-файл и необходимые для его работы dll. Это и так скопировать можно.
Вопрос в том, как все это интегрировать в один исполнимый файл? 
Руководство именно так поставило задачу.
Я еще сама не разобралась насколько это целесообразно ... инфа по этому вопросу какая-то обрывочная(

Автор: volatile 26.8.2011, 23:38
Цитата(Zyxel @  26.8.2011,  22:05 Найти цитируемый пост)
Вопрос в том, как все это интегрировать в один исполнимый файл?

Zyxel, нужно проект собирать статически.
Для этого нужны все исходники dll.
Собираете их как статические либы.
Подключаете их к своему проекту, и компилируете в один исполнимый файл.

Если исходников dll нет, ничего не выдет.
Хотя видел где-то трюки с объединением dll с исполнимым файлом в один екзешник, но это хак., и в серьезном проекте такое делать не рекомендую. Полюбому, ничего путевого не выдет из этого ... И к С++ это никокого отношения не имеет.

Автор: Zyxel 27.8.2011, 00:49
Цитата

нужно проект собирать статически.
Для этого нужны все исходники dll.
Собираете их как статические либы.
Подключаете их к своему проекту, и компилируете в один исполнимый файл.

обычно так и делаю, но в данном случае большинства исходников dll нет...
Таскать за собой либы совершенно нормальный подход, 
тем не менее если нельзя все объединить в один ехе-шник, мне нужно аргументированно 
объяснить руководителю почему. Он уверен в обратном. 
В нете эта тема широко не обсуждается, тем не менее то, что нашла крутится вокруг платформы .NET:
сборки, РЕ-файлы (portable executable)...

цитирую статью(ссылка на статью в первом посте)
 "...В статье рассказывается, как создавать такие автономные программы из одного файла. Разобран пример как со сжатием зашить библиотеку AutoMapper в программу и как ее потом достать и использовать... 
...Итак, у нас есть работающий проект, использующий сторонние библиотеки. Хочется, чтобы exe файл проекта был автономен и не требовал наличия зависимых dll в своем каталоге.Полученную ранее архивированную сборку добавляем в ресурсы проекта через Project Properties-Resources-Files. Студия при добавлении ресурса генерирует код, который позволяет использовать добавленный ресурс через Resources класс...
...Включение зависимых сборок в ресурсы самой программы позволяет ей работать автономно. Для запуска требуется один лишь exe файл. Это важно для служебных утилит, сразу готовых к использованию.
Фактически такие автономные программы не требуют установки и их удобно передавать по сети или хранить на флешке..."

Т.е. получается DLL каким то образом помещаем в сборку и  как ресурс добавляем в проект???


"

Автор: volatile 27.8.2011, 01:28
Zyxel, ну есть еще программки (типа "thisinstall"), которые делают портабельный софт из непортабельного.
Они вообще все что угодно в один екзешник могут запихнуть. smile

Автор: kiler4747 27.8.2011, 12:16
думаю это поможет
http://www.3dnews.ru/software-news/616082

Добавлено через 4 минуты и 45 секунд
если нужно ипользовать библиотеки .NET то вроде ничего не получится, т.к. при установке .NET Fraemwork 4 подстраивается под систему и железо.

Автор: Zyxel 27.8.2011, 14:10
Спасибо, MoleBox скачала, на работе установлю, посмотрю что за штука.

Этот вопрос сейчас двигаю по двум направлениям
1. упаковка в автономный ехе-шник с помощью сторонней утилиты, типа MoleBox. 
Здесь все понятно, только есть  сомнение в "солидности" этого способа. 
2. создание автономного ехе на уровне компоновки проекта. Здесь начинается чем дальше в лес, тем ну его на фиг)
много тем и никакой конкретики(

Что думаете относительно "коректности" первого способа и реальности второго?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)