diff --git "a/VanessaAutomation/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/VanessaAutomation/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 701c76ed39..cd5e35b9f0 100644 --- "a/VanessaAutomation/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/VanessaAutomation/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -27492,7 +27492,7 @@ Если ТихаяУстановкаКомпонентыИВыход Тогда Если НЕ БылаВыполненаТихаяУстановкаКомпоненты Тогда ДопПараметрыВыполнитьПодключениеВнешнейКомпоненты = ДопПараметрыВыполнитьПодключениеВнешнейКомпоненты("ПослеОткрытияФормыПродолжение"); - ТихаяУстановкаVanessaExt(ДопПараметрыВыполнитьПодключениеВнешнейКомпоненты); + ТихаяУстановкаКомпонент(ДопПараметрыВыполнитьПодключениеВнешнейКомпоненты); Возврат; КонецЕсли; ИначеЕсли Объект.ИспользоватьКомпонентуVanessaExt Тогда @@ -27502,7 +27502,7 @@ ТихаяУстановкаКомпоненты = ЗначениеПараметраЗапуска("QuietInstallVanessaExt", Ложь) ИЛИ ЗначениеПараметраЗапуска("ТихаяУстановкаVanessaExt", Ложь); Если ТихаяУстановкаКомпоненты Тогда - ТихаяУстановкаVanessaExt(ДопПараметрыВыполнитьПодключениеВнешнейКомпоненты); + ТихаяУстановкаКомпонент(ДопПараметрыВыполнитьПодключениеВнешнейКомпоненты); Возврат; КонецЕсли; КонецЕсли; @@ -45805,15 +45805,17 @@ КонецПопытки; КонецФункции +#Область ТихаяУстановкаVanessaExt + &НаСервере Функция DTСлужебнойБазыСервер() Возврат РеквизитФормыВЗначение("Объект").ПолучитьМакет("InstallVanessaExt"); -КонецФункции +КонецФункции &НаКлиенте Процедура ТихаяУстановкаVanessaExt(ДополнительныеПараметрыУстановкиКомпоненты) - #Если НЕ ВебКлиент Тогда +#Если НЕ ВебКлиент Тогда ДополнительныеПараметрыУстановкиКомпоненты.КоличествоПопытокУстановкиКомпоненты = ДополнительныеПараметрыУстановкиКомпоненты.КоличествоПопытокУстановкиКомпоненты + 1; @@ -45830,14 +45832,14 @@ ОписаниеОповещения = Новый ОписаниеОповещения("ПослеЗаписиДвоичныхДанныхСлужебнойБазы", ЭтаФорма, ДопПараметры); ДДСлужебнойБазы.НачатьЗапись(ОписаниеОповещения, ИмяВременногоФайла); - #КонецЕсли +#КонецЕсли -КонецПроцедуры +КонецПроцедуры &НаКлиенте Функция МаксКолПопытокУстановкиКомпоненты() - Возврат 5; -КонецФункции + Возврат 5; +КонецФункции &НаКлиенте Процедура ОбработкаОшибкиТихойУстановкиКомпоненты(ДополнительныеПараметрыУстановкиКомпоненты, Команда, ИмяФайлаOUT, ИмяФайлаЛога) @@ -45872,7 +45874,7 @@ &НаКлиенте Процедура ПослеЗаписиДвоичныхДанныхСлужебнойБазы(ДопПараметры) Экспорт - #Если НЕ ВебКлиент Тогда +#Если НЕ ВебКлиент Тогда КаталогПрограммы = ДополнитьСлешВПуть(КаталогПрограммы()) + ИмяИсполняемогоФайлаТолстыйКлиент; @@ -45903,7 +45905,6 @@ ВременныйКаталогБазы = ДопПараметры.ДополнительныеПараметрыУстановкиКомпоненты.ВременныйКаталогБазы; КонецЕсли; - Если НЕ ДопПараметры.ДополнительныеПараметрыУстановкиКомпоненты.Свойство("DTВременныйКаталогБазыЗагружен") Тогда // Загрузка dt @@ -45926,7 +45927,7 @@ ДопПараметры.ДополнительныеПараметрыУстановкиКомпоненты.Вставить("DTВременныйКаталогБазыЗагружен", Истина); - КонецЕсли; + КонецЕсли; //Запуск служебной базы с установкой компоненты ДопПараметры2 = Новый Структура; @@ -45939,9 +45940,9 @@ ОписаниеОповещения = Новый ОписаниеОповещения("ПослеЗаписиДвоичныхДанныхКомпоненты", ЭтаФорма, ДопПараметры2); ДДКомпоненты.НачатьЗапись(ОписаниеОповещения, ИмяВременногоФайла); - #КонецЕсли +#КонецЕсли -КонецПроцедуры +КонецПроцедуры &НаКлиенте Процедура ПослеЗаписиДвоичныхДанныхКомпоненты(ДопПараметры) Экспорт @@ -45988,8 +45989,7 @@ Тогда ОбработкаОшибкиТихойУстановкиКомпоненты(ДопПараметры.ДополнительныеПараметрыУстановкиКомпоненты, Команда, ИмяФайлаOUT, ИмяФайлаЛога); Возврат; - КонецЕсли; - + КонецЕсли; БылаВыполненаТихаяУстановкаКомпоненты = Истина; ТекстСообщения = Локализовать("Была выполнена тихая установка внешней компоненты VanessaExt."); СообщитьПользователю(ТекстСообщения); @@ -45998,7 +45998,7 @@ #КонецЕсли -КонецПроцедуры +КонецПроцедуры &НаКлиенте Процедура ЗаписатьСодержимоеФайлаВЖР(ТипФайла, ИмяФайла) @@ -46017,7 +46017,7 @@ ЗаписатьЛогВЖРИнформация("СодержимоеФайла." + ТипФайла, ТекстФайла); -КонецПроцедуры +КонецПроцедуры &НаКлиенте Процедура ВызватьОшибкуПакетнойКомандыУстановкиКомпоненты(Команда, ИмяФайлаOUT = Неопределено, ИмяФайлаЛога = Неопределено) @@ -46031,7 +46031,7 @@ Текст.Закрыть(); ТекстОшибки = ТекстОшибки + Символы.ПС + ТекстOut; - КонецЕсли; + КонецЕсли; Если ИмяФайлаЛога <> Неопределено И ФайлСуществуетКомандаСистемы(ИмяФайлаЛога) Тогда Текст = Новый ЧтениеТекста; @@ -46040,7 +46040,7 @@ Текст.Закрыть(); ТекстОшибки = ТекстОшибки + Символы.ПС + ТекстЛога; - КонецЕсли; + КонецЕсли; ЗаписатьЛогВЖРОшибка("VanessaAutomation.УстановкаКомпоненты", ТекстОшибки); @@ -46048,9 +46048,259 @@ СообщитьПользователю(ТекстОшибки); Иначе ВызватьИсключение ТекстОшибки; - КонецЕсли; + КонецЕсли; -КонецПроцедуры +КонецПроцедуры + +#КонецОбласти + +#Область ТихаяУстановкаКомпонент + +&НаКлиенте +Процедура ТихаяУстановкаКомпонент(ДополнительныеПараметрыУстановкиКомпоненты) + +#Если ВебКлиент Тогда + Возврат; +#КонецЕсли + + ОписаниеПлатформы = ОписаниеПлатформы(); + + ПараметрыТихойУстановки = Новый Структура; + ПараметрыТихойУстановки.Вставить("Компоненты", Новый Массив()); + ПараметрыТихойУстановки.Вставить("РабочийКаталог", ""); + ПараметрыТихойУстановки.Вставить("ОперационнаяСистема", ОписаниеПлатформы.ОперационнаяСистема); + ПараметрыТихойУстановки.Вставить("Архитектура", ОписаниеПлатформы.Архитектура); + ПараметрыТихойУстановки.Вставить("ДанныеРеестра", ""); + ПараметрыТихойУстановки.Вставить("ИзмененРеестр", Ложь); + ПараметрыТихойУстановки.Вставить("ДополнительныеПараметрыУстановкиКомпоненты", ДополнительныеПараметрыУстановкиКомпоненты); + + ОписаниеКомпоненты = Новый Структура; + ОписаниеКомпоненты.Вставить("ИмяМакета", "WindowCaptureComponent"); + ОписаниеКомпоненты.Вставить("АдресХранилища", МестоположениеВнешнейКомпонентыДляСкриншотов); + ПараметрыТихойУстановки.Компоненты.Добавить(ОписаниеКомпоненты); + + Обработчик = Новый ОписаниеОповещения("ТихаяУстановкаКомпонент_ПослеПолученияРабочегоКаталогаПользователя", ЭтаФорма, ПараметрыТихойУстановки); + НачатьПолучениеРабочегоКаталогаДанныхПользователя(Обработчик); + +КонецПроцедуры + +&НаКлиенте +Процедура ТихаяУстановкаКомпонент_ПослеПолученияРабочегоКаталогаПользователя(РабочийКаталогПользователя, ПараметрыТихойУстановки) Экспорт + + КаталогКомпонент = ОбъединитьПути(РабочийКаталогПользователя, "..", "..", "..", "ExtCompT"); + ПараметрыТихойУстановки.РабочийКаталог = КаталогКомпонент; + + ВыполнитьТихуюУстановкуКомпонент(ПараметрыТихойУстановки); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьТихуюУстановкуКомпонент(ПараметрыТихойУстановки) + + ПрочитатьФайлRegistry(ПараметрыТихойУстановки); + + Для Каждого ОписаниеКомпоненты Из ПараметрыТихойУстановки.Компоненты Цикл + + ФайлКомпоненты = ФайлКомпоненты(ОписаниеКомпоненты.АдресХранилища, ПараметрыТихойУстановки.ОперационнаяСистема, ПараметрыТихойУстановки.Архитектура); + Если ЗаписатьВРеестр(ПараметрыТихойУстановки.ДанныеРеестра, ФайлКомпоненты.ИмяФайла) Тогда + ПараметрыТихойУстановки.ИзмененРеестр = Истина; + КонецЕсли; + + ПолноеИмяФайлаКомпоненты = ОбъединитьПути(ПараметрыТихойУстановки.РабочийКаталог, , , , ,ФайлКомпоненты.ИмяФайла); + ФайлКомпоненты.Данные.Записать(ПолноеИмяФайлаКомпоненты); + + КонецЦикла; + + Если ПараметрыТихойУстановки.ИзмененРеестр Тогда + ЗаписатьФайлRegistry(ПараметрыТихойУстановки); + КонецЕсли; + + БылаВыполненаТихаяУстановкаКомпоненты = Истина; + ТекстСообщения = Локализовать("Была выполнена тихая установка внешней компоненты VanessaExt."); + СообщитьПользователю(ТекстСообщения); + ЗаписатьЛогВЖРИнформация("ТихаяУстановкаКомпоненты", ТекстСообщения); + ВыполнитьПодключениеВнешнейКомпоненты(ПараметрыТихойУстановки.ДополнительныеПараметрыУстановкиКомпоненты); + +КонецПроцедуры + +&НаКлиенте +Процедура ПрочитатьФайлRegistry(ПараметрыТихойУстановки) + + ФайлРеестра = ОбъединитьПути(ПараметрыТихойУстановки.РабочийКаталог, , , , ,"registry.xml"); + Попытка + Чтение = Новый ЧтениеТекста(ФайлРеестра); + Данные = Чтение.Прочитать(); + Чтение.Закрыть(); + Исключение + // Файл реестра отсутствует + КонецПопытки; + + ПараметрыТихойУстановки.ДанныеРеестра = Данные; + +КонецПроцедуры + +&НаКлиенте +Функция ЗаписатьВРеестр(ДанныеРеестра, ИмяФайла) + + Если _СтрНайти(ДанныеРеестра, " + | + | + |", ИмяФайла); + ИначеЕсли _СтрНайти(ДанныеРеестра, _СтрШаблон("path=""%1""", ИмяФайла)) <> 0 Тогда // Компонента уже зарегистрирована + Возврат Ложь; + Иначе // Добавляем компоненту + Запись = _СтрШаблон(" ", ИмяФайла); + ДанныеРеестра = СтрЗаменить(ДанныеРеестра, "", Запись + Символы.ПС + ""); + КонецЕсли; + + Возврат Истина; + +КонецФункции + +&НаКлиенте +Процедура ЗаписатьФайлRegistry(ПараметрыТихойУстановки) + + Если ПараметрыТихойУстановки.ИзмененРеестр Тогда + ФайлРеестра = ОбъединитьПути(ПараметрыТихойУстановки.РабочийКаталог, , , , , "registry.xml"); + Запись = Новый ЗаписьТекста(ФайлРеестра); + Запись.Записать(ПараметрыТихойУстановки.ДанныеРеестра); + Запись.Закрыть(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ОписаниеПлатформы() + + СистемнаяИнформация = Новый СистемнаяИнформация; + + ОперационнаяСистема = Неопределено; + Архитектура = Неопределено; + + Linux = "Linux"; + Windows = "Windows"; + MacOS = "MacOS"; + + x86 = "i386"; + x64 = "x86_64"; + + ТипКлиентскойПлатформы = СистемнаяИнформация.ТипПлатформы; + + Если ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86 Тогда + ОперационнаяСистема = Linux; + Архитектура = x86; + ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86_64 Тогда + ОперационнаяСистема = Linux; + Архитектура = x64; + ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86 Тогда + ОперационнаяСистема = Windows; + Архитектура = x86; + ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86_64 Тогда + ОперационнаяСистема = Windows; + Архитектура = x64; + ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86 Тогда + ОперационнаяСистема = MacOS; + Архитектура = x86; + ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86_64 Тогда + ОперационнаяСистема = MacOS; + Архитектура = x64; + Иначе + ВызватьИсключение "Неподдерживаемый тип платформы"; + КонецЕсли; + + Возврат Новый Структура("ОперационнаяСистема, Архитектура", ОперационнаяСистема, Архитектура); + +КонецФункции + +&НаСервереБезКонтекста +Функция ФайлКомпоненты(Знач АдресХранилища, Знач ОперационнаяСистема, Знач Архитектура) + + Данные = ПолучитьИзВременногоХранилища(АдресХранилища); + ЧтениеАрхива = Новый ЧтениеZipФайла(); + ЧтениеАрхива.Открыть(Данные.ОткрытьПотокДляЧтения()); + + ИмяФайлаКомпоненты = ИмяФайлаКомпоненты(ЧтениеАрхива, ОперационнаяСистема, Архитектура); + + Если ИмяФайлаКомпоненты = Неопределено Тогда + ВызватьИсключение "Компонента не поддерживает клиентское окружение"; + КонецЕсли; + + Данные = ДвоичныеДанныеЭлемента(ЧтениеАрхива, ИмяФайлаКомпоненты); + + Возврат Новый ФиксированнаяСтруктура("ИмяФайла, Данные", ИмяФайлаКомпоненты, Данные); + +КонецФункции + +&НаСервереБезКонтекста +Функция ИмяФайлаКомпоненты(ЧтениеАрхива, ОперационнаяСистема, Архитектура) + + Данные = ДвоичныеДанныеЭлемента(ЧтениеАрхива, "MANIFEST.XML"); + + Если Данные = Неопределено Тогда + ВызватьИсключение "Архив компоненты не содержит манифеста"; + КонецЕсли; + + ЧтениеXML = Новый ЧтениеXML(); + ЧтениеXML.ОткрытьПоток(Данные.ОткрытьПотокДляЧтения()); + + ИмяФайлаКомпоненты = Неопределено; + + Пока ЧтениеXML.Прочитать() Цикл + + Если ЭтоПодходящийУзел(ЧтениеXML, ОперационнаяСистема, Архитектура) Тогда + ИмяФайлаКомпоненты = ЧтениеXML.ЗначениеАтрибута("path"); + Прервать; + КонецЕсли; + + КонецЦикла; + + ЧтениеXML.Закрыть(); + + Возврат ИмяФайлаКомпоненты; + +КонецФункции + +&НаСервереБезКонтекста +Функция ЭтоПодходящийУзел(ЧтениеXML, ОперационнаяСистема, Архитектура) + + Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента ИЛИ НРег(ЧтениеXML.Имя) <> "component" Тогда + Возврат Ложь; + КонецЕсли; + + ОперационнаяСистемаУзла = ЧтениеXML.ЗначениеАтрибута("os"); + АрхитектураУзла = ЧтениеXML.ЗначениеАтрибута("arch"); + + Возврат ОперационнаяСистема = ОперационнаяСистемаУзла И Архитектура = АрхитектураУзла; + +КонецФункции + +&НаСервереБезКонтекста +Функция ДвоичныеДанныеЭлемента(ЧтениеАрхива, ИмяФайла) + + ЭлементФайла = Неопределено; + + Для Каждого Элемент Из ЧтениеАрхива.Элементы Цикл + Если ВРег(Элемент.ПолноеИмя) = ВРег(ИмяФайла) Тогда + ЭлементФайла = Элемент; + КонецЕсли; + КонецЦикла; + + Если ЭлементФайла = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + ЧтениеАрхива.Извлечь(ЭлементФайла, ИмяВременногоФайла, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); + + Данные = Новый ДвоичныеДанные(ОбъединитьПути(ИмяВременногоФайла, , , , , ЭлементФайла.Имя)); + УдалитьФайлы(ИмяВременногоФайла); + + Возврат Данные; + +КонецФункции + +#КонецОбласти &НаКлиенте Функция ЭтоЗапускИзКоманднойСтроки() @@ -50559,7 +50809,7 @@ Если НЕ БылаВыполненаТихаяУстановкаКомпоненты Тогда Если ЗначениеПараметраЗапуска("QuietInstallVanessaExt", Ложь) ИЛИ ЗначениеПараметраЗапуска("ТихаяУстановкаVanessaExt", Ложь) Тогда - ТихаяУстановкаVanessaExt(ДопПараметрыВыполнитьПодключениеВнешнейКомпоненты); + ТихаяУстановкаКомпонент(ДопПараметрыВыполнитьПодключениеВнешнейКомпоненты); Возврат; КонецЕсли; КонецЕсли; @@ -56660,7 +56910,7 @@ КонецФункции -#КонецОбласти +#КонецОбласти #Область TeamCity @@ -56695,14 +56945,14 @@ КонецФункции &НаКлиенте -Процедура НачатьТестTeamCity(СтрокаСценария) +Процедура НачатьТестTeamCity(СтрокаСценария) Файл = Новый Файл(МассивСценариевДляВыполнения[ТекИД_СценарияВМассиве].ПолныйПутьКФиче); ТекущийФичаФайл = Файл.ИмяБезРасширения; Если НастройкиTeamCity.ЭтоПервыйЗапуск Тогда НастройкиTeamCity.ЭтоПервыйЗапуск = Ложь; ВывестиВКонсольTeamCity(НастройкиTeamCity.Шаблоны.НачалоГруппы); - КонецЕсли; + КонецЕсли; Если НастройкиTeamCity.ТекущийФичаФайл = "" Тогда НастройкиTeamCity.ТекущийФичаФайл = ТекущийФичаФайл;