Skip to content

Commit e96c889

Browse files
committed
Выпил события ПередУстановкой
ПередУстановкой вызывается до этапа распаковки файлов. Сценариев работы придумать не получается, а вот получение сценария-констант этот метод разламывает из-за невозможности компиляции самого packagedef
1 parent 863a3f0 commit e96c889

File tree

2 files changed

+31
-49
lines changed

2 files changed

+31
-49
lines changed

src/Классы/СборщикПакета.os

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -258,18 +258,7 @@
258258
ЗаписьТекста.ЗаписатьСтроку("///////////////////////////////////////////////////////////////////
259259
|
260260
|");
261-
262-
ЗаписьТекста.ЗаписатьСтроку("// Вызывается пакетным менеджером перед установкой пакета на клиентскую машину.");
263-
ЗаписьТекста.ЗаписатьСтроку("// ");
264-
ЗаписьТекста.ЗаписатьСтроку("// Параметры:");
265-
ЗаписьТекста.ЗаписатьСтроку("// АрхивПакета - ЧтениеZipФайла. Открытый архив пакета.");
266-
ЗаписьТекста.ЗаписатьСтроку("// КаталогУстановкиПакета - строка. Путь в который пакетный менеджер устанавливает текущий пакет.");
267-
ЗаписьТекста.ЗаписатьСтроку("// ");
268-
ЗаписьТекста.ЗаписатьСтроку("Процедура ПередУстановкой(Знач АрхивПакета, Знач КаталогУстановкиПакета, СтандартнаяОбработка) Экспорт");
269-
ЗаписьТекста.ЗаписатьСтроку(" // TODO: Реализуйте спец. логику установки, если требуется");
270-
ЗаписьТекста.ЗаписатьСтроку("КонецПроцедуры");
271-
ЗаписьТекста.ЗаписатьСтроку(Символы.ПС);
272-
261+
273262
ЗаписьТекста.ЗаписатьСтроку("// Вызывается пакетным менеджером после распаковки пакета на клиентскую машину.");
274263
ЗаписьТекста.ЗаписатьСтроку("// ");
275264
ЗаписьТекста.ЗаписатьСтроку("// Параметры:");

src/Классы/УстановкаПакета.os

Lines changed: 30 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -365,31 +365,14 @@
365365

366366
ЧтениеСодержимого = Новый ЧтениеZipФайла(ФайлСодержимого);
367367
Попытка
368-
ИмяФайлаСпецификацииПакета = КонстантыOpm.ИмяФайлаСпецификацииПакета;
369-
ЭлементСпецификацииПакета = ЧтениеСодержимого.Элементы.Найти(ИмяФайлаСпецификацииПакета);
370-
Если ЭлементСпецификацииПакета <> Неопределено Тогда
371-
Лог.Отладка("Найден файл спецификации пакета");
372-
373-
ЧтениеСодержимого.Извлечь(ЭлементСпецификацииПакета, мВременныйКаталогУстановки, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
374-
Лог.Отладка("Компиляция файла спецификации пакета");
375-
ОбъектСкрипта = ЗагрузитьСценарий(ОбъединитьПути(мВременныйКаталогУстановки, ИмяФайлаСпецификацииПакета));
376-
377-
ВызватьСобытиеПередУстановкой(ОбъектСкрипта, ЧтениеСодержимого, ПутьУстановки.ПолноеИмя, СтандартнаяОбработка);
378-
379-
Если СтандартнаяОбработка Тогда
380-
381-
Лог.Отладка("Устанавливаю файлы пакета из архива");
382-
УдалитьУстаревшиеФайлы(ПутьУстановки);
383-
ЧтениеСодержимого.ИзвлечьВсе(ПутьУстановки.ПолноеИмя);
384-
385-
ВызватьСобытиеПриУстановке(ОбъектСкрипта, ПутьУстановки.ПолноеИмя, СтандартнаяОбработка);
386-
387-
КонецЕсли;
388-
Иначе
389-
Лог.Отладка("Устанавливаю файлы пакета из архива");
390-
УдалитьУстаревшиеФайлы(ПутьУстановки);
391-
ЧтениеСодержимого.ИзвлечьВсе(ПутьУстановки.ПолноеИмя);
392-
КонецЕсли;
368+
369+
Лог.Отладка("Устанавливаю файлы пакета из архива");
370+
УдалитьУстаревшиеФайлы(ПутьУстановки);
371+
ЧтениеСодержимого.ИзвлечьВсе(ПутьУстановки.ПолноеИмя);
372+
373+
ОбработчикСобытий = ПолучитьОбработчикСобытий(ПутьУстановки.ПолноеИмя);
374+
ВызватьСобытиеПриУстановке(ОбработчикСобытий, ПутьУстановки.ПолноеИмя, СтандартнаяОбработка);
375+
393376
Исключение
394377
ЧтениеСодержимого.Закрыть();
395378
ВызватьИсключение;
@@ -411,24 +394,34 @@
411394
КонецЦикла;
412395
КонецПроцедуры
413396

414-
Процедура ВызватьСобытиеПередУстановкой(Знач ОбъектСкрипта, Знач АрхивПакета, Знач Каталог, СтандартнаяОбработка)
415-
416-
Рефлектор = Новый Рефлектор;
417-
Если Рефлектор.МетодСуществует(ОбъектСкрипта, "ПередУстановкой") Тогда
418-
Лог.Отладка("Вызываю событие ПередУстановкой");
419-
ОбъектСкрипта.ПередУстановкой(АрхивПакета, Каталог, СтандартнаяОбработка);
397+
Функция ПолучитьОбработчикСобытий(Знач ПутьУстановки)
398+
ОбработчикСобытий = Неопределено;
399+
ИмяФайлаСпецификацииПакета = КонстантыOpm.ИмяФайлаСпецификацииПакета;
400+
ПутьКФайлуСпецификации = ОбъединитьПути(ПутьУстановки, ИмяФайлаСпецификацииПакета);
401+
Если ФС.ФайлСуществует(ПутьКФайлуСпецификации) Тогда
402+
Лог.Отладка("Найден файл спецификации пакета");
403+
Лог.Отладка("Компиляция файла спецификации пакета");
404+
405+
ОписаниеПакета = Новый ОписаниеПакета();
406+
ВнешнийКонтекст = Новый Структура("Описание", ОписаниеПакета);
407+
ОбработчикСобытий = ЗагрузитьСценарий(ПутьКФайлуСпецификации, ВнешнийКонтекст);
420408
КонецЕсли;
421409

422-
КонецПроцедуры
410+
Возврат ОбработчикСобытий;
411+
КонецФункции
412+
413+
Процедура ВызватьСобытиеПриУстановке(Знач ОбработчикСобытий, Знач Каталог, СтандартнаяОбработка)
414+
415+
Если ОбработчикСобытий = Неопределено Тогда
416+
Возврат;
417+
КонецЕсли;
423418

424-
Процедура ВызватьСобытиеПриУстановке(Знач ОбъектСкрипта, Знач Каталог, СтандартнаяОбработка)
425-
426419
Рефлектор = Новый Рефлектор;
427-
Если Рефлектор.МетодСуществует(ОбъектСкрипта, "ПриУстановке") Тогда
420+
Если Рефлектор.МетодСуществует(ОбработчикСобытий, "ПриУстановке") Тогда
428421
Лог.Отладка("Вызываю событие ПриУстановке");
429-
ОбъектСкрипта.ПриУстановке(Каталог, СтандартнаяОбработка);
422+
ОбработчикСобытий.ПриУстановке(Каталог, СтандартнаяОбработка);
430423
КонецЕсли;
431-
424+
432425
КонецПроцедуры
433426

434427
Процедура СгенерироватьСкриптыЗапускаПриложенийПриНеобходимости(Знач КаталогУстановки, Знач ОписаниеПакета)

0 commit comments

Comments
 (0)