forked from Stivo182/oscript-allocs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpackage-loader.os
More file actions
112 lines (84 loc) · 5.35 KB
/
Copy pathpackage-loader.os
File metadata and controls
112 lines (84 loc) · 5.35 KB
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
// Пояснения по переменным даны в конце модуля
Перем ПоказатьСообщенияЗагрузки;
Процедура ПриЗагрузкеБиблиотеки(Путь, СтандартнаяОбработка, Отказ)
Вывести("
|ПриЗагрузкеБиблиотеки " + Путь);
СтандартнаяОбработка = Ложь;
Вывести("Обрабатываем структуру каталогов по соглашению");
ОбработатьСтруктуруКаталоговПоСоглашению(Путь);
КонецПроцедуры
Процедура ОбработатьСтруктуруКаталоговПоСоглашению(Путь)
КаталогиВК = Новый Массив;
КаталогиВК.Добавить(ОбъединитьПути(Путь, "Components"));
КаталогиВК.Добавить(ОбъединитьПути(Путь, "Компоненты"));
Для Каждого мКаталог Из КаталогиВК Цикл
ОбработатьКаталогВК(мКаталог);
КонецЦикла;
КонецПроцедуры
// По соглашению ВК должны лежать в подпапках, названных, как значения перечисления ТипПлатформы.
// Имя файла, являющегося внешней компонентой должно иметь префикс 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"));
Иначе
Вывести("Неизвестная мажорная версия системы: " + МажорнаяВерсия);
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьБиблиотекиCLR(Путь)
КандидатыВКомпоненты = НайтиФайлы(Путь, "1script_*.dll");
Для Каждого Кандидат Из КандидатыВКомпоненты Цикл
Если Не Кандидат.ЭтоФайл() Тогда
Продолжить;
КонецЕсли;
Вывести("Загружаю файл " + Кандидат.Имя);
ЗагрузитьБиблиотеку(Кандидат.ПолноеИмя);
КонецЦикла;
КонецПроцедуры
Процедура Вывести(Знач Сообщение)
Если ПоказатьСообщенияЗагрузки Тогда
Сообщить(Сообщение);
КонецЕсли;
КонецПроцедуры
Функция ПолучитьБулевоИзПеременнойСреды(Знач ИмяПеременнойСреды, Знач ЗначениеПоУмолчанию)
Рез = ЗначениеПоУмолчанию;
РезИзСреды = ПолучитьПеременнуюСреды(ИмяПеременнойСреды);
Если ЗначениеЗаполнено(РезИзСреды) Тогда
РезИзСреды = СокрЛП(РезИзСреды);
Попытка
Рез = Число(РезИзСреды) <> 0 ;
Исключение
Рез = ЗначениеПоУмолчанию;
ТекстСообщения = СтрШаблон("Неверный формат переменной среды %1. Ожидали 1 или 0, а получили %2",
ИмяПеременнойСреды,
РезИзСреды);
Сообщить(ТекстСообщения);
КонецПопытки;
КонецЕсли;
Возврат Рез;
КонецФункции
// Если Истина, то выдаются подробные сообщения о порядке загрузке пакетов, классов, модулей,
// что помогает при анализе проблем очень полезно при анализе ошибок загрузки
// Переменная среды может принимать значение 0 (выключено) или 1 (включено)
// Значение флага по умолчанию - Ложь
ПоказатьСообщенияЗагрузки = ПолучитьБулевоИзПеременнойСреды(
"OSLIB_LOADER_TRACE", Ложь);
// для установки других значений переменных среды и запуска скриптов можно юзать следующую командную строку
// (set OSLIB_LOADER_TRACE=1) && (oscript .\tasks\test.os)