| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Расширение для QtCreator |
| Автор: Avazart 18.5.2013, 19:50 |
| Пишу свой плагин для QtCtreator. Суть работы плагина отображать все "зависимости от DLL" текущего открытого проекта и при необходимости скопировать все DLL в папку с exe проекта - т.е. для удобства переноса приложения на другие компьютеры. Вопрос : как получить из плагина полный путь к исполняемому файлу exe текущего открытого проекта, текущей сборки ( debug/release ) ? На данный момент готово : http://www.youtube.com/watch?feature=player_embedded&v=vyqmNb5sQ2Y Но путь определяется не совсем верно... |
| Автор: bsa 20.5.2013, 11:45 |
| Avazart, зачем создаешь одинаковые темы на разных форумах? Ты нашел решение, напиши его сюда и пометь тему решенной. |
| Автор: Avazart 20.5.2013, 22:44 |
| На тот момент когда создавал решения небыло ... В дальнейшем ответ нашелся на другом форуме... |
| Автор: bsa 21.5.2013, 11:22 |
| Avazart, ты так и не сделал то, что я попросил. |
| Автор: Avazart 21.5.2013, 23:30 | ||
Собственно, уважаемый, какие притензии ко мне ? |
| Автор: Majestio 22.5.2013, 00:12 | ||||
Правило хорошего тона: нашл решение - отпиши! Создал кростпост на 5 -375 форумах, отпишись. Так правильно. |
| Автор: Avazart 22.5.2013, 01:33 | ||
Издеваетесь ? Могу кинуть ссылку на решение, если оно так интересно и если конечно это не противоречит правилам форума ( ссылаться на др. форумы ) |
| Автор: Avazart 23.5.2013, 00:23 |
| Тогда нет проблем : http://www.prog.org.ru/topic_22168_120.html Если обстоятельства сложатся, когда доделаю выложу ссылку на сам плагин и его исходники. |
| Автор: Avazart 28.2.2014, 13:48 |
| Плагин и его исходники выложены тут: http://www.cyberforum.ru/blogs/131347/blog509.html |
| Автор: bsa 28.2.2014, 14:20 |
| Плагин интересный и, возможно, очень даже полезный (особенно для новичков). Но, к сожалению, судя по видео, еще не совсем готов. Рекомендую немного поменять тематику этого плагина. Сделать не только поиск зависимостей, но и сборку готового пакета (для начала - просто архива программы и всех необходимых библиотек; затем можно и msi замутить или Qt Installer Framework заюзать). В этом случае его можно будет смело двигать в основное дерево исходников Qt Creator. |
| Автор: Avazart 18.6.2014, 14:14 |
Что именно вам кажеться не готовым ? Что касаестся направленности на сборку пакета, тут возникает куча вопросов. К примеру если делать архив то каким архиватором? Ибо от него будет зависеть работоспособность плагина. Если делать инсталятор(какой инсталятор использовать?) то тут возникает куча вопросов куда ставить все добро и как распределять. Да и вообще стоит делать инсталятор когда можно такскать просто папку с программой? Так как наряд ли новички осилят сборку QtCreator и плагина, решил выложить программу: http://www.cyberforum.ru/blogs/131347/blog2457.html |
| Автор: bsa 19.6.2014, 12:22 | ||
| Есть устоявшиеся стандарты. В Windows - это ZIP, в *nix - это tar.bz2. А потом, архив - это не самоцель. Для начала достаточно сделать копирование всех необходимых файлов (в т.ч. и программы и плагинов) в указанную пользователем папку с воссозданием дерева каталогов, а уже затем можно думать о сжатии. Есть стандарты. Под Window - это MSI. Под линукс - это rpm и dpkg (остальные менее распространены, да и не под *nix ты делаешь).
|
| Автор: Avazart 19.6.2014, 16:50 | ||||
Плагин как раз и копирует длл с воссозданием дерева в папку с экзешником. И никто не мешает потом разработчику скопировать их куда надо и зархивировать тем арихиватором или инсталятором который он предпочитает, и с теми настройками которые ему нужны. Дело в том что стандортов нет, все что вы сказали это не стандарты, а лишь то рапростанено как частое решение. Лично мое мнение если прога не пишит в реестр и не производит каких-то магических действий с системой, то в инсталяторе нет необходимости, в остальном по обстоятельствам. Существуют таки довига видов инсталяторов и архивов способов упаковки/распаковки, и я не вижу смысла привязывать плагин еще к какому то одному из них.
Я не об этом. А о том что к примеру, если ставить 10 ваших программ то вероятно в папке кадой будет лежать пакет из Qt-DLL-лок что не хорошо ибо их можно было бы использовать совместно - один пакет для всех программ написанных на Qt данной версии. Не хорошо ложить на плечи плагина то что должен делать разработчик: а именно выбор инсталятора, то как и куда распаковывать программу, ведь программа программе рознь. |
| Автор: bsa 20.6.2014, 13:40 | ||||||
Кстати, только с помощью MSI установщика можно организовать централизованную установку через Active Directory. Имей в виду. |
| Автор: Avazart 20.6.2014, 14:33 | ||||||
Ну я ведь не для этого делаю его что бы им не ползавались. Мало того что писать установщик писать - это мартышкин труд, кроме этого в зависимости от особенностей проекта (не только предпочтений разработчика, а разработчик не простой пользователь) может быть лучше использовать то или иной установщик.
У на вируталке XP как я помню там не было вообще архиватора изначально. Кроме того я имел опыт написания инсталяторов, и к примеру было такое что на одной из машин просто не было папки %PROGRAMFILES% (проверка 32/64 была).
Это называется фиговый стиль- срать в системные папки. Кроме того если что-то где-то удалится руками и пиши пропало. |
| Автор: bsa 20.6.2014, 16:03 | ||||||
Фиговый/не фиговый, а он стандартен и предусмотрен MS. Как вариант, ты можешь сделать папку c:\program files\Common files\Avazart Shared\qt, прописать ее в переменной PATH и пихать библиотеки туда... Ты часто что-то удаляешь руками из ...\system32? А потом, если ты сделал это, то виноват в неработающей программе только ты. |
| Автор: Avazart 20.6.2014, 16:53 | ||||||||
Расзработчик не обычный пользователь, врядли ему нужны довески. Лично я всегда делал с помощью InnoSetup и скрипт писал для него руками ибо в зависимости от программы нужно было делать разные вещи. Был такой момент когда небходимо было определить перед установкой конфмгурацию компа.
Ты не понял заказчик утверждал что такой папки вообще нет на машине. Что касается реестра то тут ошибится еще легче.
Ну это качественно разные решения, о втором я уже давно подумываю.
Все просто инсталятор не сработал по какой либо причине и в реестр счетчик не минусанулся- в итоге пользователь скорее всего полезит руками удалять, удалив саму программу но не изменив счетчик, и пакет в ~200M останится лежать в системной папке. |
| Автор: Avazart 30.9.2014, 14:39 |
| Провел обновление программы для сборки DLL http://www.cyberforum.ru/blogs/131347/blog2457.html Просьба отписываться, если кому-то интересно и он протестил. |
| Автор: borisbn 30.9.2014, 18:43 |
| Avazart, хорошая программа, но 1) Программа запускает мой exe-шник в Вашем каталоге и, соответственно, не видит своих файлов (да ещё и гадит логами в Ваш каталог) 2) Если бы она ещё умела смотреть какие файлы я открывал (БД, конфиги и т.п.) - то вообще бы ей цены не было |
| Автор: Avazart 30.9.2014, 20:29 | ||
(1)- Понял, нужно будет поправить этот момент. Насчет (2) вообще не врубился, можете пояснить? |
| Автор: borisbn 1.10.2014, 08:54 |
Кроме dll моя программа открывает н-ное количество файлов, например - читает конфиги из подкаталога cfg, открывает БД и т.п. Хотелось бы, чтобы Ваша программа умела отслеживать, какие файлы моя программа открывала (как это делает http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx) и так же давала бы возможность их скопировать (оставляя структуру каталогов). И ещё один момент: есть у меня программа картографии. При запуске из-под DLLCollector'а получаю это ![]() Неплохо было бы разделить dll-ки, лежащие в каталоге с программой от других. Дело в том, что картографию MapX я ставлю отдельным инсталлятором, и мне не нужно тянуть в свой проект файлы из Program Files\Mapx\... |
| Автор: Avazart 1.10.2014, 10:20 | ||
1.) Нужно подумать возможно ли такое, хотя по-моему тольк оразработчику известно как программа и откуда должна тянуть другие файлы и как они должны размещаться отноительно exe. 2.) Так ваша программа вроде не на Qt написана, естетсвенно что почти все зависимости будут в "other" |
| Автор: borisbn 1.10.2014, 10:26 | ||||
А Вы не смотрели Process Explorer ?
Мне также известно где и какие dll-ки программа юзает. Вы же делаете автоматизацию. Сборку части файлов (dll) Вы сделали, так почему бы не сделать со всеми файлами, которые нужны exe-шнику ?
Да, не на Qt, но смысл не в этом. Смысл в том, что в этом Other неплохо бы разделить по каталогам, чтобы я мог выделить для копирования один каталог и снять выделение полностью с другого (в моём примере - с C:\Program Files\Mapx\...) |
| Автор: Avazart 1.10.2014, 10:44 | ||||||
DLL грузятся в начале прилложения, когда загрузятся файлы абсолютно не известно. Да и зачем копировать то что и так лежит рядом? Зачем вобще смотреть на те файлы которые лежать в той же папке и тем более делать разделение на каталоги? Насколько часто в приложении на Qt нужно копировать отделными каталогами? |
| Автор: borisbn 1.10.2014, 11:23 | ||||
Не все dll грузятся в начале. Есть динамически подгружаемые. Для этого у Вас и есть отдельно кнопка Update.
Если программа использует только Qt, то не нужно, а если использует картографию, БД типа Oracle, или любые компоненты, которые устанавливаются отдельно, то DLLCollector сваливает всё в кучу и мне приходится руками убирать галочки с кучи dll-лек из каталогов MapX, Oracle и т.п. В общем, мне так кажется, что Вы не очень хотите этим заниматься Попробую по свободе сам. Вы не против ? У Вас не проприетарный софт ? |
| Автор: kuzulis 1.10.2014, 14:08 |
| Гы. Я для аналогичных целей использую Qbs и не нужно всяких плагинов и прочее. Например в моих последних проектах (под Windows) использую WiX Toolset для создания инсталляторов (в принципе, любой сложности). Например, в QBS можно накидать "скриптики/проектики/модули" которые будут искать нужные рантайм библиотеки/плагины Qt а также рантайм от VS ипрочее. Т.е. в одном проекте сразу одним кликом можно собрать все нужные exe-шники, плагины/dll-ки и другие конфигурационные файлы, закинуть их в инсталлятор с учетом иерархии и прочего, собрать инсталлятор с любой сложностью (как с установкой и запуском сервисов, если они имеются в проекте, с регистрацией в реестре всяких вещей, если нужно и прочее..). Т.е., мое ИМХО - в принципе, этот плагин чисто для академического интереса, к сожалению. На данный момент лучше переходить на QBS вместо qmake, так как это дает гораздо большие возможности "скриптописания", т.к. не ограничивается возможностями какого-то плагина в QtCreator. Да и в целом, проще и универсальнее: в любой момент я могу подправить JS скриптик/модуль и оно заработает. |
| Автор: Avazart 1.10.2014, 18:25 | ||||||||||
| QBS - неофециален, да и кому интересно изучать что-то еще для того что бы только собрать DLL-ки? Скриптописание? А на кой оно здалось, если пишешь на С++ ?
Qt и грузит плагины динамически как раз, но в отличие от файлов они загружаются где-то в начале и живут все время, а файл может открыться в произвольный момент и произвольный момент закрыться.
Ну так сугубо для Qt и писалось, для dll-лок и плагинов Qt ну и в нагрузку dll-ки компилятора.
Что-то не понял, галочки в other не должны ставится сами.
Было бы время и необходимость в этом, писал для себя ибо задрало плагины собирать.
Да как бы и выкладывал для этого вместе с исходниками. Только если где-то будете выкладывать где-то, укажите ссылку пожалуйста ссылку на блог. |
| Автор: Avazart 25.3.2018, 15:18 |
| Обновил программу, теперь можно писать свои сценарии на js http://www.cyberforum.ru/blogs/131347/blog2457.html |