Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / автоматический сбор всех bpl для проекта / 20 сообщений из 20, страница 1 из 1
24.07.2021, 10:38
    #40085892
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
Проблема не нова - при переносе программы на другой компьютер начинаются проблемы - не найдены bpl.
Когда их 5, не сложно все и вручную скопировать.
Но когда 55 - то начинает подбешивать. К тому же заметил интересное - одна bpl требует другую.
Есть ли возможность автоматического анализа / копирования таких библиотек?
Спасибо.
...
Рейтинг: 0 / 0
24.07.2021, 10:51
    #40085893
Softologic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
bzums,

А втянуть их в экзешник при сборке изначально, не вариант?
...
Рейтинг: 0 / 0
24.07.2021, 11:11
    #40085898
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
Этот вариант конечно самый нормальный :-)
Но в чужую избу со своим уставом не ходят.
Так хочет клиент (не знаю причины).
Инсталлятор получается 350 метров.
Тем не менее, ручное копирование bpl ( и тем более из разных путей) - большой гемор.

Конкретно сейчас, приходится смотреть в лог Eureka (а там есть и полный путь до bpl) или парсить его.
Вот и возник вопрос, может быть есть более элегантное решение.
Причем для самого EXE и для BPL (которые могут ссылаться на другие BPL).
Спасибо.
...
Рейтинг: 0 / 0
24.07.2021, 16:59
    #40085939
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
bzums

Есть ли возможность автоматического анализа / копирования таких библиотек?
Спасибо.


В поставку Делфи раньше входила утилита TDump.exe, позволяющая узнать, какие имена из каких библиотек импортируется данным exe/dll/bpl. Если проект не использует "ручную" подгрузку bpl, то можно построить дерево зависимостей, потом найти, где лежат эти bpl, потом создать .bat, который будет их копировать в "одно место" :)

Если такие проблемы с копированием, как билд проекта делается?
...
Рейтинг: 0 / 0
24.07.2021, 20:30
    #40085960
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
bzums,
Сделать одну единую bpl или глянуть таблицу импортов в exe и найти все bpl и распространять с exe.
...
Рейтинг: 0 / 0
24.07.2021, 22:48
    #40085965
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
Обычно у программ есть такая штука как инсталлер.

Используйте его, а не копируйте отдельные файлы.
...
Рейтинг: 0 / 0
25.07.2021, 03:21
    #40085977
northener
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
Cobalt747
Обычно у программ есть такая штука как инсталлер.
Используйте его, а не копируйте отдельные файлы.

А вопрос ТС вы внимательно читали?
...
Рейтинг: 0 / 0
25.07.2021, 10:41
    #40085992
Virtual Student
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
ziv-2014
bzums,
Сделать одну единую bpl или глянуть таблицу импортов в exe и найти все bpl и распространять с exe.

Вот, помню, где-то после 6-7-й Delphi пролетала такая приблуда...
А сейчас как можно собрать пачку библиотек в один файл?
...
Рейтинг: 0 / 0
25.07.2021, 14:47
    #40086039
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
Virtual Student,
Создать bpl, взять исходники и добавить в bpl, скомпилировать exe с этой bpl и все.
В JCL есть утилита, которая показывает в каких модулях хранится код и в какой bpl.
Так что проблемы не составит. Если исходников нет, то никак.
...
Рейтинг: 0 / 0
25.07.2021, 15:28
    #40086048
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
Так вот я не знаю, как это билдится достоверно.
В двух словах, как и писал выше - используется лог Eureka. Там есть ссылки на все bpl с путями. Скорее всего батник какой-то и просит этот лог.
На выходе и имеется интсаллятор, в котором EXE и 55 bpl.
Стало интересно после того, как я попытался скопировать скомпилированную программу ( на моём то компе она работает, естественно ) на другую станцию.
Все концы найти невозможно.

Исходники программы у меня естественно есть. Исходники все требуемых bpl - не уверен. Но скорее всего тоже.
Как все это запихнуть в единый bpl ( а в идеале - автоматизировать ) - не знаю. Но попробую
Большое спасибо.
...
Рейтинг: 0 / 0
25.07.2021, 16:45
    #40086059
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
bzums,

Решается эта проблема очень просто: делается скрипт, который собирает этот exe и 55 bpl, складывает эти свежескомпиленные бинарники в определенное место и запускает компиляцию инсталлятора.
Всё. Проблемы с тем, где что лежит - не будет. А IDE нужна только для отладки.
И, да, лучше собирать версии на отдельном сервере сборок. Чтоб ничего лишнего. Но можно и на рабочем компе организовать.
...
Рейтинг: 0 / 0
25.07.2021, 16:48
    #40086061
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
bzums
Проблема не нова - при переносе программы на другой компьютер начинаются проблемы - не найдены bpl.
Сорри, я тоже не прочитал первый пост

Эта проблема не решаема. Хочешь не пользоваться инсталлятором и копировать файлики - копируй, и приготовься страдать.
...
Рейтинг: 0 / 0
25.07.2021, 17:44
    #40086071
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
Так а как получить список bpl?
И ещё учесть в нем и те bpl, которые требуют другоие bpl.
Для меня это и есть основная проблема.
Спасибо.
...
Рейтинг: 0 / 0
25.07.2021, 18:49
    #40086079
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
bzums
Так а как получить список bpl?
И ещё учесть в нем и те bpl, которые требуют другоие bpl.
Для меня это и есть основная проблема.
Спасибо.
Они, если не ошибаюсь, статически подгружаются? Значит, будет падать, если не хватает.
Ну вот, копируешь EXE в пустую папку, и начинаешь подкидывать, пока не запустится.
Затем берешь список файлов в этой папке - это и есть искомый список. Я бы его так получил.
...
Рейтинг: 0 / 0
25.07.2021, 19:14
    #40086084
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
bzums
Так а как получить список bpl?

Спасибо.


tdump смотрели?
...
Рейтинг: 0 / 0
25.07.2021, 19:32
    #40086087
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
bzums

Спасибо.

Вот батник:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@echo off
set td=C:\Delphi\Delphi\Bin\tdump.exe
%td% %1 | find /I "imports from" | sort >$
for /f "tokens=*" %%i in ($) do call :flt %%i
goto exit
:flt
if not [%last%]==[%3] (
  set last=%3
  echo %3
)
goto exit
:exit


Путь к папке с дельфи установите, аргумент - имя exe/bpl
...
Рейтинг: 0 / 0
25.07.2021, 20:11
    #40086091
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
bzums
Так а как получить список bpl?

Еще вариант - EnumProcessModules при работающем приложении, получатся библиотеки с путями и даже те, которые через LoadPackage грузились.
Но это надо сесть и написать...
...
Рейтинг: 0 / 0
26.07.2021, 10:26
    #40086143
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
x1ca4064
bzums
Так а как получить список bpl?

Еще вариант - EnumProcessModules при работающем приложении, получатся библиотеки с путями и даже те, которые через LoadPackage грузились.
Но это надо сесть и написать...

Или ProcessExplorer
...
Рейтинг: 0 / 0
26.07.2021, 12:08
    #40086178
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
25.07.2021 17:44, bzums пишет:
> Так а как получить список bpl?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
function GetModuleFileName(Module: HModule): string;
var
   Buff: string;
   BuffSize: Cardinal;
begin
   Result := '';
   if (Module > HINSTANCE_ERROR) then
     begin
       BuffSize := MAX_PATH + 1;
       SetLength(Buff, BuffSize);
       BuffSize := Windows.GetModuleFileName(Module, PChar(Buff), BuffSize);
       if BuffSize > 0 then
         Result := Copy(Buff, 1, BuffSize);
     end;
end;

function GetModules: string;
const
   cBPLinfo ='Загруженные модули:';
var
   P: PLibModule;
begin
   Result := '';
   if Assigned(LibModuleList) and Assigned(LibModuleList.Next) then
     begin
       P := LibModuleList.Next;
       Result := cBPLinfo;
       while Assigned(P) do
         begin
           Result := Result + #13#10 + '  ' + GetModuleFileName(P.Instance);
           P := P.Next;
         end;
     end;
end;
...
Рейтинг: 0 / 0
28.07.2021, 08:01
    #40086614
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматический сбор всех bpl для проекта
Спасибо большое!
Все получилось.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / автоматический сбор всех bpl для проекта / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]