OneScript icon indicating copy to clipboard operation
OneScript copied to clipboard

После упаковки в EXE-модуль не работают внешние компоненты

Open goleaff opened this issue 4 years ago • 14 comments

Опишите ошибку Понятное описание того, что происходит

используется импорт #Использовать sql

После упаковки в EXE

выводится ошибка конструктор не найден, запуск без упаковки отрабатывает отлично.

Воспроизведение ошибки

#Использовать sql Соединение = Новый Соединение;

Steps to reproduce the behavior:

  1. Запустить код ...
  2. Подать на вход параметры ...
  3. Увидеть ошибку

Ожидаемое поведение Отработает как при запуске без упаковки

Окружение

  • ОС: windows
  • Версия:1.5.0.187

Дополнительная информация

goleaff avatar Feb 06 '21 14:02 goleaff

По-моему, это дубликат #487 и #1014 Требуется человек, который это доработает и починит (или скажет в чем там дело)

EvilBeaver avatar Feb 08 '21 08:02 EvilBeaver

Вкратце: упаковка в EXE задумывалась исключительно как упаковка 1 (одного!) файла скрипта. Потом потребовалось упаковывать туда много файлов из библиотек - сделали. Автоматическая упаковка DLL вместе со всеми их зависимостями не поддерживается этим режимом и никогда не поддерживалась. В качестве замены можно посоветовать упаковку dll в макеты, но опять же - надо протестировать насколько это работает.

EvilBeaver avatar Feb 08 '21 08:02 EvilBeaver

Спасибо. Осталось понять - "можно посоветовать упаковку dll в макеты", куда и что нужно пихнуть, пересобрать DLL? или библиотеку SQL, которая подключается #Использовать sql? Пример бы как это делается.

goleaff avatar Feb 08 '21 08:02 goleaff

Автор библиотеки SQL должен создать "макет" с dll и использовать его не с диска по файловому пути, а через механику макетов. Документации сходу найти не смог, но она точно где-то есть.

EvilBeaver avatar Feb 08 '21 09:02 EvilBeaver

В какой-то из либ @Khorevaa используются макеты

nixel2007 avatar Feb 08 '21 09:02 nixel2007

Да в gitsync и используется :))) Запаковываю в hex и потом в класс, распаковка во временный файл https://github.com/oscript-library/gitsync/blob/master/tasks/pack.os - тут запаковывается временный файл cfe https://github.com/khorevaa/gitsync-plugins/blob/develop/tasks/pack.os - тут еще и dll из проекта unpack

khorevaa avatar Feb 08 '21 18:02 khorevaa

@khorevaa ну т.е. получается, ты не используешь макеты 1Скрипта, а хранишь в собственном механизме?

EvilBeaver avatar Feb 09 '21 08:02 EvilBeaver

Когда писалось.. еще не было макетов

khorevaa avatar Feb 09 '21 08:02 khorevaa

Я создавал #1014. Насколько я помню, перед этим тикетом Никита @nixel2007 написал мне, что нужно dll упаковывать в Макет. Я так делал, насколько я помню, dll распаковывалась в временный каталог, но проблема с конструктором оставалась.

antonyfg avatar Feb 09 '21 09:02 antonyfg

Я создавал #1014. Насколько я помню, перед этим тикетом Никита @nixel2007 написал мне, что нужно dll упаковывать в Макет. Я так делал, насколько я помню, dll распаковывалась в временный каталог, но проблема с конструктором оставалась.

Там ещё замуты с регистрацией этой длл. Насколько я помню, сейчас типы из длл можно подключить только на этапе package-loader. В рантайме уже "поздно". Возможно это поправлено в 2.0, но тут вопрос к @EvilBeaver

nixel2007 avatar Feb 09 '21 09:02 nixel2007

Да, в лоадере пакета, там где объявляются классы/модули

EvilBeaver avatar Feb 09 '21 15:02 EvilBeaver

У меня, кстати, ошибка была с другой dll - oscript-gui.dll. До сих пор приходится пользоваться oscript версии 1.2, чтобы запускать dll в exe.

antonyfg avatar Feb 09 '21 20:02 antonyfg

@antonyfg это должно быть исправлено в версии 1.6 Попробуйте её

EvilBeaver avatar Apr 29 '21 07:04 EvilBeaver

Предлагаю класть все необходимые dll в ту же папку, где лежит ЕХЕ. Рядом создавать файл имяфайлаехе.cfg, в который записывать имена dll, которые необходимо загрузить... Этот файл нужен потому, что тут же в папке могут быть сторонние dll, которые не являются библиотеками ОСкрипта и поэтому их загружать не надо... Я дописал небольшой фрагмент в файл src\StandaloneRunner\ProcessLoader.cs и всё заработало... Прилагаю к этому сообщению файл исходника и пример того, как все выглядит в готовом виде... Cам сделать PR не могу, так что если решение посчитаете правильным и есть желающие внедрить, будет хорошо.. Пример.zip .

perfolenta avatar Dec 16 '21 01:12 perfolenta