diff --git a/ci/installer_set/share/oint/lib/package-loader.os b/ci/installer_set/share/oint/lib/package-loader.os index 59d4845d0f..915c41a157 100644 --- a/ci/installer_set/share/oint/lib/package-loader.os +++ b/ci/installer_set/share/oint/lib/package-loader.os @@ -106,6 +106,9 @@ КаталогиМодулей.Добавить(ОбъединитьПути(Путь, "src", "Модули")); КаталогиМодулей.Добавить(ОбъединитьПути(Путь, "src", "Modules")); + КаталогиВК = Новый Массив; + КаталогиВК.Добавить(ОбъединитьПути(Путь, "Components")); + КаталогиВК.Добавить(ОбъединитьПути(Путь, "Компоненты")); Для Каждого мКаталог Из КаталогиКлассов Цикл @@ -118,6 +121,12 @@ ОбработатьКаталогМодулей(мКаталог, СтандартнаяОбработка, Отказ); КонецЦикла; + + Для Каждого мКаталог Из КаталогиВК Цикл + + ОбработатьКаталогВК(мКаталог, СтандартнаяОбработка, Отказ); + + КонецЦикла; КонецПроцедуры @@ -161,6 +170,75 @@ КонецПроцедуры +// По соглашению ВК должны лежать в подпапках, названных, как значения перечисления ТипПлатформы. +// Имя файла, являющегося внешней компонентой должно иметь префикс 1script_ +// Components +// net4 (фреймворк .net48 +// 1script_barcode.dll +// dotnet (.net современных версий, он же netcore) +// 1script_barcode.dll +// NativeApi +// Windows_x86 +// 1script_barcode.dll +// Windows_x86_64 +// 1script_barcode.dll +// Linux_x86_64 +// 1script_barcode.so +// остальные не поддерживаются (ЖВПР) +// +Процедура ОбработатьКаталогВК(Знач Путь, СтандартнаяОбработка, Отказ) + + СИ = Новый СистемнаяИнформация(); + МажорнаяВерсия = Лев(СИ.Версия,1); + + Если МажорнаяВерсия = "1" Тогда + ОбработатьБиблиотекиCLR(ОбъединитьПути(Путь, "net4")); + ИначеЕсли МажорнаяВерсия = "2" Тогда + ОбработатьБиблиотекиCLR(ОбъединитьПути(Путь, "dotnet")); + Иначе + Вывести("Неизвестная мажорная версия системы: " + МажорнаяВерсия); + КонецЕсли; + + ОбработатьКомпонентыNativeApi(Путь); + +КонецПроцедуры + +Процедура ОбработатьБиблиотекиCLR(Путь) + КандидатыВКомпоненты = НайтиФайлы(Путь, "1script_*.dll"); + Для Каждого Кандидат Из КандидатыВКомпоненты Цикл + Если Не Кандидат.ЭтоФайл() Тогда + Продолжить; + КонецЕсли; + + Вывести("Загружаю файл " + Кандидат.Имя); + ЗагрузитьБиблиотеку(Кандидат.ПолноеИмя); + + КонецЦикла; +КонецПроцедуры + +Процедура ОбработатьКомпонентыNativeApi(Путь) + СИ = Новый СистемнаяИнформация; + ИмяПодкаталога = ОбъединитьПути(Путь, Строка(СИ.ТипПлатформы)); + Вывести("Ищу внешние компоненты в каталоге " + Путь); + + #Если Windows Тогда + Расширение = ".dll"; + #Иначе + Расширение = ".so"; + #КонецЕсли + + КандидатыВКомпоненты = НайтиФайлы(ИмяПодкаталога, "1script_*"+Расширение); + Для Каждого Кандидат Из КандидатыВКомпоненты Цикл + Если Не Кандидат.ЭтоФайл() Тогда + Продолжить; + КонецЕсли; + + Вывести("Загружаю файл " + Кандидат.Имя); + ПодключитьВнешнююКомпоненту(Кандидат.ПолноеИмя, Кандидат.Имя, ТипВнешнейКомпоненты.Native); + + КонецЦикла; +КонецПроцедуры + Процедура ДобавитьКлассЕслиРанееНеДобавляли(ПутьФайла, ИмяКласса) Вывести("Добавляю класс, если ранее не добавляли " + ИмяКласса); Если ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей Тогда @@ -171,13 +249,14 @@ КлассУжеЕсть = Ложь; Попытка - Объект = Новый(ИмяКласса); - КлассУжеЕсть = Истина; - Исключение - СообщениеОшибки = ОписаниеОшибки(); - ИскомаяОшибка = СтрШаблон("Конструктор не найден (%1)", ИмяКласса); - КлассУжеЕсть = СтрНайти(СообщениеОшибки, ИскомаяОшибка) = 0; - КонецПопытки; + ИзвестныйТип = Тип(ИмяКласса); + КлассУжеЕсть = Истина; + Исключение + СообщениеОшибки = ОписаниеОшибки(); + ШаблонОшибки = НСтр("ru = 'Тип не зарегистрирован (%1)';en = 'Type is not registered (%1)'"); + ИскомаяОшибка = СтрШаблон(ШаблонОшибки, ИмяКласса); + КлассУжеЕсть = СтрНайти(СообщениеОшибки, ИскомаяОшибка) = 0; + КонецПопытки; Если Не КлассУжеЕсть Тогда Вывести("Добавляю класс, т.к. он не найден - " + ИмяКласса);