Russian Qt Forum
Ноябрь 01, 2024, 04:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 3 [4] 5   Вниз
  Печать  
Автор Тема: Совместимлсть Qt dll  (Прочитано 28532 раз)
Bepec
Гость
« Ответ #45 : Июль 01, 2014, 18:48 »

Берём и делаем такую структуру
Код:
path/bin/
            1.exe // program 1
            2.exe // program 2
            3.exe // program 3
            4.exe // program 4
            *.dll // some dll/plugin/
path/
       1.exe // win api loader
       2.exe // copy loader
       3.exe // copy loader
       4.exe // copy loader

При установке в реестр прописываем путь "path/bin/"

Псевдокод loader
Код:
// функция, которая получает путь к каталогу с бинарниками программ.
dir=GetRegistryPathMyProgram();
// dir="path/bin/"
// получаем имя процесса
file=GetProcessName();
// file=имя текущего лоадера ([1-4].exe)
startProcess(dir+file);

PS понятно, что уязвимость переименования есть, но это лишь для понимания сути моей идеи.
PPS можно и 4 экземпляра лоадера собирать, ничего сложного нет, только менять file.
PPPS в результате у нас программы лежат спокойно и жрут одни dll и плагины. Лоадеры будут очень лёгкими и переносимыми в пределах компа, на котором установлена программа.
« Последнее редактирование: Июль 01, 2014, 18:58 от Bepec » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #46 : Июль 03, 2014, 08:34 »

Лоадеры будут очень лёгкими и переносимыми в пределах компа, на котором установлена программа.
Цель - запуск нескольких (скопированных) exe (а не instance(s) одного модуля). Подразумевается копирование всех плагинов и необходимых файлов. Это однообразно на Win/OSX (там вторую копию юзер не запустит) и без разницы "'эта машина или другая".
Записан
Bepec
Гость
« Ответ #47 : Июль 03, 2014, 10:41 »

Вы хотите без топора срубить дерево.
Перенести программу без установки? Пожалуйста, усложните лоадер на внесение/изменение записи в реестре при наличие рядом с ним каталога с dll и вашими модулями. И напишите предупреждение в лоадере, типа "для работы программы необходимо переносить каталог bin в папке с запускаемым файлом".

Хотите перенести программу копированием лоадера? Вспоминается...
Цитировать
Вопрос в службу поддержки:
Уважаемая служба поддержки, я хочу сохранить фильм на дискету, но компьютер мне пишет, что недостаточно места, поэтому мне приходится сохранять ярлык. Если я хочу посмотреть фильм на другом компьютере, то он мне выдает ошибку, что файл не найден. Но ведь на моем компьютере фильм прекрасно проигрывается! В чем проблема?
С дружеским приветом, Катя Иванова
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #48 : Июль 05, 2014, 09:19 »

Попытаюсь оживить тему. Что можно придумать кроме "класть рядом с exe-шкой"?

1) Инсталлятор прописывает path. Ну любой др инсталлятор (включая мой же в след версии) сделает то же. Какие dll найдутся - как бог пошлет.

2) Делать какой-то "загрузчик". Заботы уже имею (хотя бы алерты в WinAPI), но что достигается? Как я понял предыдущего докладчика, теперь загрузчик можно куда угодно копировать, из любой точки он запустит "ту самую" exe. Толку ноль, запуск 2 и более копий не поддерживается, а для одной гораздо проще опять-таки положить рядом.

3) Хотелось бы так: стартануть, самому найти и загрузить все нужные dll, удостовериться что все они Ok, а потом уж запускать бандуру с UI на Qt. Вот на OSX есть "weak" линковка (нашли либу или нет - все равно стартовать). Но на Вындоуз я про это ничего не слышал.

4) Еще предложения ?

Спасибо
Записан
Bepec
Гость
« Ответ #49 : Июль 05, 2014, 09:32 »

По 2 пункту вы выразились туманно. Какое то ограничение на 2 копии и запуск "той самой exe".
Никаких ограничений нет, загрузчик играет роль ярлыка.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #50 : Июль 05, 2014, 09:47 »

Толку ноль, запуск 2 и более копий не поддерживается, а для одной гораздо проще опять-таки положить рядом.
Почему не поддерживается? Поддерживается.

Не знаю, для чего такой загрузчик делать программой, но если заняться больше нечем, то ...
Здесь хватит простого командного файла, в котором можно настроить все необходимое окружение и запустить любую программу. И копировать его можно.
Даже простых ярлыков должно хватить, там вроде можно указывать рабочую директорию.
« Последнее редактирование: Июль 05, 2014, 09:58 от Old » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #51 : Июль 05, 2014, 10:28 »

Здесь хватит простого командного файла,
..
Даже простых ярлыков должно хватить,
Конечно можно. Но требования заказчика (в общих чертах) "должно быть солидно, никаких (е)батников". И, по большому счету, он прав
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #52 : Июль 05, 2014, 10:33 »

Огласите список солидностей. Улыбающийся Сейчас, пользователь копирует несколько exe с dll и это солидно, а копировать один файлик, это не солидно.

Чем заказчику батники не солидны, делают все что нужно, легко конфигурируется, стандартно. В новых вендах есть мощный командный язык.
Еще раз, я не навязываю никаких решений, если заказчик не компетентен, то его можно просвятить, но для этого самому нужно быть компетентным.
Но если заказчик дурак, то да, остаётся страдать и решать плюшевые требования.
« Последнее редактирование: Июль 05, 2014, 10:47 от Old » Записан
Bepec
Гость
« Ответ #53 : Июль 05, 2014, 11:16 »

Если солидно, то берём, всё запаковываем в лаунчер, лаунчер при запуске в темп кладёт программу и запускает Веселый И чорненькую рамочку лаунчеру. Тогда точно солидно, мб на 40 получится exe Улыбающийся

PS bat'ник поправить может каждый. А вот расковырять лаунчер надо постараться Веселый
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #54 : Июль 05, 2014, 11:31 »

Огласите список солидностей. Улыбающийся Сейчас, пользователь копирует несколько exe с dll и это солидно, а копировать один файлик, это не солидно.
Список очень прост если Вы знакомы с Mac. Хорошим тоном считается отсутствие какого-либо инсталлятора, установка сводится к копированию приложения (или фолдера приложения) куда угодно, рекомендуется в Application. Некультурно разбрасывать либы, пусть и в своем фолдере, их надо помещать в "bundlle" приложения.

"Копировать фолдер приложения" проходит и на Вындоуз (для данного проекта). Однако тут без инсталла не обойтись, хотя бы нужны рантаймы и др. Вот как бы мне Qt либы пристроить чтобы они не мозолили глаза и не грузились многократно?

Возня с батниками в эту схему не вписывается, не тратьте время
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #55 : Июль 05, 2014, 11:35 »

Вот подумал - а если сделать какую-то свою маленькую dll которая грузится первой и разбирается с Qt либами делая для них LoadLibrary? Ведь если загружена в память процесса - искать на диске не должна.

Бред?
Записан
Bepec
Гость
« Ответ #56 : Июль 05, 2014, 11:50 »

На мак и реализована распаковка.
Тот же VLC скачиваем - один файл. Представляет собой zip архив определённой структуры. При запуске распаковывается куда то и запускается. Вот и весь сказ.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #57 : Июль 05, 2014, 11:55 »

Вот подумал - а если сделать какую-то свою маленькую dll которая грузится первой и разбирается с Qt либами делая для них LoadLibrary? Ведь если загружена в память процесса - искать на диске не должна.
Тогда пользователю нужно будет копировать эту библиотеку вместе с exe.

Для чего вы придумывает сложности?
Если не хотите батник,  то лучше один ланчер, чем два exe+dll.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #58 : Июль 05, 2014, 11:59 »

Возня с батниками в эту схему не вписывается, не тратьте время
Да, для кого то "солидность", а для других список дурных советов. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #59 : Июль 05, 2014, 12:15 »

Вот подумал - а если сделать какую-то свою маленькую dll которая грузится первой и разбирается с Qt либами делая для них LoadLibrary? Ведь если загружена в память процесса - искать на диске не должна.
Тогда пользователю нужно будет копировать эту библиотеку вместе с exe.
Как уже говорилось, никто и не ставит задачи "копировать один exe файл", нужно просто как-то "изолировать" толпу Qt dll, а будет еще один файл в фолдере приложения - нормально. Хорошо, а как добиться чтобы "вот эта " грузилась первой?

лучше один ланчер, чем два exe+dll.
А что это за ланчер, как он будет разбираться с копиями?
Записан
Страниц: 1 2 3 [4] 5   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.