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

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

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

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


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

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

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

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

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

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

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

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

Спасибо.


tdump смотрели?
...
Рейтинг: 0 / 0
автоматический сбор всех bpl для проекта
    #40086087
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
автоматический сбор всех bpl для проекта
    #40086091
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bzums
Так а как получить список bpl?

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

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

Или ProcessExplorer
...
Рейтинг: 0 / 0
автоматический сбор всех bpl для проекта
    #40086178
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
автоматический сбор всех bpl для проекта
    #40086614
bzums
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое!
Все получилось.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / автоматический сбор всех bpl для проекта
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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